• 締切済み

教えてください

読み込んだ整数を例えば、3322だとしたら、0は0個、1は0個、2は2個、3は2個、4は0個、5は0個、6は0個、7は0個、8は0個、9は0個。のようにするプログラムを配列を用いて表示するのですが、下のプラグラムではできません。教えてください。宜しくお願いします。これは途中からです。 printf("整数を入力してください。"); scanf("%d", &num); do{ num=num / 10; kansu[i]=num % 10; }while (num > 0); for(j=0; j<10; j++) printf("%d個は%dです。\n",j, kansu[i]); return (0); }

みんなの回答

  • seiuchi4
  • ベストアンサー率37% (71/189)
回答No.2

#1です。補足します。 for(i=0; i<10; i++) kansu[i]=0; これは、kansu[0]からkansu[9]までの10個の配列に0を入れています。 do{ }while(num>0); は、jjjj27さんと同じですのでいいですよね? kansu[num % 10]++; num%10で、最下位桁の0から9の数値を求めます。 最下位桁が 2 だった場合、変数kansu[2]を+1します。 要は、最下位桁が2だった場合、kansu[]の[2]を+1することになります。 kansu[num%10]=kansu[num%10]+1と同じです。 num /= 10; は、 num = num / 10; と同じで、1桁小さい整数を求めています。 例えば numが123だったら、12になる。 現在の2桁目を次のループで1桁目にする処理です。 10個の箱があって、それぞれの箱に0から9の番号が振ってあって、 最下位から順に数値を検査して、対象の箱にボールを1つづつ入れていく。 数値の検査が終わったら、0から順にボールの数を表示していく。 そんなイメージでしょうか?

  • seiuchi4
  • ベストアンサー率37% (71/189)
回答No.1

LightCにて確認しました。 jjjj27さんのソースでは do{ num=num / 10; kansu[i]=num % 10; }while (num > 0); で結果を入れる場所が不定ですね。 なお、下記ソースでは最大32767までの入力となります (intが16bitの場合) int i; int num,kansu[10]; printf("整数を入力してください。"); scanf("%d", &num); for(i=0; i<10; i++) kansu[i]=0; do{ kansu[num % 10]++; num /= 10; }while(num>0); for(i=0; i<10; i++) printf("%dは%d個です。\n",i, kansu[i]);

jjjj27
質問者

補足

for(i=0; i<10; i++) kansu[i]=0; do{ kansu[num % 10]++; num /= 10; }while(num>0); このソースがいまいち分かりません。詳しく説明してください。お願いします。

関連するQ&A