質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

2回答

504閲覧

整数aに対してa*bが2つの数字のみで表せる最小のbを見つける

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2019/10/20 02:18

編集2019/10/20 07:19

例えばa=109に対してb=5などです。
アウトプットが2つの数字で表されるところまでfor loopで繰り返そうと思うのですが、a*bを調べる方法がわかりません。たぶんarrayに入れればひとつひとつ桁ごとの数字を調べることはできると思うのですが、どういうifなどの条件をつければいいでしょうか?

追記
aは5桁までの任意の整数を想定しています。bは最小なので、aに応じます。
ここまで書きましたが、どうすればいいのかわかりません。

c

1#include<stdio.h> 2#include<stdlib.h> 3#define MAX 10000 4 5int main(){ 6 7 FILE *fp; 8 int i,input[MAX]; 9 int data; 10 int n[10]={0,0,0,0,0,0,0,0,0,0}; 11 12 13 fp = fopen("text1.txt","r");//aはファイルから取得 14 if (fp == NULL){ 15 printf("file open error\n"); 16 fclose(fp); 17 exit(1); 18 } 19 20 for(i=0;i<MAX;i++){ 21 data = fscanf(fp,"%d",&input[i]); 22 if (data == EOF) break; 23 // printf("%d\n",input[i]); 24 } 25 26 27 28 fclose(fp); 29 30} 31

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuma-s

2019/10/20 07:03

a や b に制限はありますか? a = 810, b = 12345679, a*b = 9999999990 この場合、a*b が int の範囲を超えるのでダメですか?
guest

回答2

0

  1. 配列 n[10] を用意する
  2. b = 1, 2, 3... に対し:

2.1. n[]を0で埋める
2.2. a*b の各桁の値dに対し n[d] に+1 する
2.3. n[0]~n[9]のうち、0でないものがふたつだけあればコタエはbとして終了。

投稿2019/10/20 02:52

編集2019/10/20 02:53
episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

b の大きさを正しく推定していないので適切な回答ではありませんが、

C

1#include <stdio.h> // fopen, fclose, fscanf, sprintf, printf, puts 2 3unsigned long long f(int a) 4{ 5 for (unsigned long long b = 1; b < 1000000000000ULL; b++) { 6 int n[10] = { 0 }; 7 char s[24]; 8 sprintf(s, "%llu", a * b); 9 for (char *p = s; *p; p++) n[*p - '0']++; 10 int k = 0; 11 for (int i = 0; i < 10; i++) if (n[i]) k++; 12 if (k == 2) return b; 13 } 14 return 0; 15} 16 17int main(void) 18{ 19 FILE *fp = fopen("text1.txt", "r"); 20 if (fp == NULL) { puts("file open error"); return 1; } 21 int a; 22 while (fscanf(fp, "%d", &a) == 1) { 23 unsigned long long b = f(a); 24 printf("a = %d, b = %llu, a*b = %llu\n", a, b, a*b); 25 } 26 fclose(fp); 27}

text1.txt

109 810 99999

実行結果

a = 109, b = 5, a*b = 545 a = 810, b = 12345679, a*b = 9999999990 a = 99999, b = 10, a*b = 999990

投稿2019/10/20 07:43

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問