• 締切済み

C言語(プログラミング)

次の働きをするプログラムを作ろうと考えてますが、出来ない状態です。 入力:1から4999の間のアラビア数字を受け取る。入力の終わりは改行。 出力:入力されたアラビア数字に対応するローマ数字を出力する。 変換したい次のアラビア数字があるかどうかを(y又はnで)尋ねてyならば上の入力からを繰り返す,nならば終了。 自分が考えたのは、4999以下のアラビア数字がきた場合と5000以上のアラビア数字がきた場合を考え、 int c;while((c=getchar()) != '\n')、Switch(c)文を使い、CASEでCase C<=4999:Case C>=5000としたのですがコンパイルできませんでした。ご指摘やアドバイス、このプログラム自体教えていただければありがたいです。お願いします

みんなの回答

  • ryuta_mo
  • ベストアンサー率30% (109/354)
回答No.3

3つも回答してすみません。 よく文章読まない人なんで。 下のプログラムに繰り返すか訪ねる文を追加すれば希望のプログラムになると思います。 それと、Case文では条件は使えません switch(c) { case n: と書けばc==nの時に実行されます。

  • ryuta_mo
  • ベストアンサー率30% (109/354)
回答No.2

よく考えれば数値を減らしながら出力すれば変数が必要な気が・・・ #include<stdio.h> main() { int n; printf("アラビア数字を入力してください"); scanf("%d",&n); if(n>=1&&n<=4999) { while(n>=1000) { printf("M"); n=n-1000; } if(n>=500) { printf("D"); n=n-500; } while(n>=100) { printf("C"); n=n-100; } if(n>=50) { printf("L"); n=n-50; } while(n>=10) { printf("X"); n=n-10; } if(n>=5) {printf("V"); n=n-5; } while(n>=1) { printf("I"); n--; } printf("\n"); } return 0; }

  • ryuta_mo
  • ベストアンサー率30% (109/354)
回答No.1

1.変数の宣言 2.数値の入力 3.1~4999の範囲か? そうでなければ終了 4.M(1000)の数を計算 5.同じ方法でD(500)、C(100)、L(50)、X(10),V(5),I(1)を計算 6.計算結果に従って表示 #include<stdio.h> main() { int n,m,d,c,l,x,v,i; printf("アラビア数字を入力してください"); scanf("%d",&n); if(n>=1&&n<=4999) { m=n/1000; n=n%1000; d=n/500; n=n%500; c=n/100; n=n%100; l=n/50; n=n%50; x=n/10; n=n%10; v=n/5; n=n%5; i=n; n=1; while(n>=m) { printf("M"); n--; } if(d)printf("D"); n=1; while(n>=c) { printf("C"); n--; } if(l)printf("L"); n=1; while(n>=x) { printf("X"); n--; } if(v)printf("V"); n=1; while(n>=i) { printf("I"); n--; } printf("\n"); } return 0; } こんな感じですかね?

関連するQ&A