コマンド-分数の小数表示
- 評価
- クリップ 1
- VIEW 1,051

退会済みユーザー
■やりたい事
コマンド行引数として与えられる2つの正整数 m, n ( 1 < n < 10000000 ) を読み取り、m/n の小数表示を標準出力に書き出すプログラムを作る。
与えられる m, n は、m が n では割り切れないものとする。出力は左詰に m を書き出し、 / に続いて n を書き出す。 続けて、空白を前後に置いて = を書き出し、整数部に続けて . を書き出し、以後小数部を書き出して最後に改行を行え。 小数部は、循環小数になる場合は非循環部を書き出した後、' を書き出し1度だけ循環部を書き出すこと。 有限小数になる場合はその小数部を書き出すこと。
実行例
コマンドライン入力
71 8
標準入力
標準出力
71/8 = 8.875
コマンドライン入力
13 7
標準入力
標準出力
13/7 = 1.'857142
コマンドライン入力
10 6
標準入力
標準出力
10/6 = 1.'6
■自分なりに作成してみましたが思うような出力となりません。
修正箇所等教えて頂きたく。
#include <stdio.h>
int main(int argc, char *argv[]){
int n;
scanf("%d", &n);
int rr[n], qq[n];
int r, q, i, j, k;
r= 1; k= 0;
for(i= 1; r!=0 && k==0; i++){
rr[i]= r;
r*= 10;
q= r/n; qq[i]= q;
r= r%n;
for(k= i; k!=0 && rr[k]!=r; k--);
}
printf("0.");
for(j= 1; j!=i; j++){
if( r!=0 && j==k ) printf("'");
printf("%d", qq[j]);
}
printf("\n");
return 0;
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
0
修正箇所等教えて頂きたく。
コマンド行引数として与えられる2つの正整数 m, n ( 1 < n < 9500 ) を
とあるのに、n を標準入力から読み込もうとしています。
コマンド行引数から読み込むように修正してください。
m を全く読み込んでいません。
コマンド行引数から読み込むように修正してください。
m と n が 71 と 8 のとき、出力は 8.87 なのに
printf("0."); と書いています。修正してください。
コード全体を修正すると、
#include <stdio.h> // printf, putchar
#include <stdlib.h> // atoi
#define NUM 9500
int main(int argc, char *argv[])
{
int i, j, m, n, m0, q[NUM], p[NUM] = { 1 };
if (argc != 3) return 1;
m = atoi(argv[1]);
n = atoi(argv[2]);
if (m < 1 || n <= 1 || n >= NUM) return 2;
m0 = m;
for (i = 0; i < NUM; i++) {
q[i] = m / n;
m %= n;
if (p[m]) break;
p[m] = i + 1;
m *= 10;
}
printf("%d/%d = %d", m0, n, q[0]);
if (m || i > 0) putchar('.');
for (j = 1; j <= i; j++) {
if (m && j == p[m]) putchar('\'');
printf("%d", q[j]);
}
printf("\n");
return 0;
}
どの部分が分からないのかを質問してください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
y_waiwai
2019/11/17 12:49 編集
どういう出力結果になるのを目指してるのか、また、それがどういう出力結果となるんでしょう。
質問を編集し、追記してください
kazuma-s
2019/11/17 13:03
https://teratail.com/questions/222766
なぜ、解決済みのはずなのに同じ質問をするんですか?
cateye
2019/11/17 13:34 編集
https://teratail.com/questions/223523 の質問が生かされていません→コマンド行引数
「循環小数」の判定は?
→https://teratail.com/help/avoid-asking
yukke_
2019/11/17 17:59
https://teratail.com/help/avoid-asking
> コードをください・デバッグしてください等の丸投げの質問
を読んで出直してきてください。
2019/11/23 23:43
複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。