- ベストアンサー
C言語で、数値の桁数を求めるには??
C言語で数値の桁数を求めるプログラムをもとめたいのですが どうすればいいのでしょうか int c; int a; c=12345; a=printf("%d",c); とするとaに桁数は入るのですが cがPRINTF関数により表示されてしまいます どうすればいいでしょうか? わかる方はおしえてください、おねがいします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
sprintf 関数というのがあります。 printf 関数とまったく同じですが、結果を変数に出力する点が違います。 char dummy[10]; int c, a; c=12345; a=printf(dummy, "%d",c); この dummy 変数には文字列 "12345" が入りますが、使わなければどうということはないです。 C言語を使い始めてそろそろ10年になりますが、sprintf をこんなふうに使おうとは思いもしませんでした(^_^; なんか反則っぽいですけど、合理的ですね(笑) ちなみに、答えが0になるまで10で割っていって、割ることができた回数を数えるのが普通のやりかたです。
その他の回答 (3)
-------------------------------------- int c; int a; c=12345; for(a = 0; c != 0; a++) c /= 10; printf("答え…%d桁", a);//omake -------------------------------------- お好きな方法でどうぞ。。。
- leaz024
- ベストアンサー率75% (398/526)
桁数を求めたいなら、math.h の log10 関数を使いましょう。 log10 は常用対数を求める関数です。 つまり、10を何乗すると引数の値になるのかが求まります。 例えば 12,345 の場合、これは 10,000 < 12,345 < 100,000 なので、 log10(10,000) < log10(12,345) < log10(100,000) であり、 4 < log10(12,345) < 5 となります。 答えは小数になるので int型へキャストし、桁数より1少ない値が求まっているので1を足します。 というわけで、 a = (int)log10(c) + 1; とすればOK。 sprintfを使うのも面白いですが、普通はこれで十分です。 こっちの方が安上がりだしね。
- yatokesa
- ベストアンサー率40% (201/496)
sprintf でダミーのバッファに出力。