• ベストアンサー

C言語で、数値の桁数を求めるには??

C言語で数値の桁数を求めるプログラムをもとめたいのですが どうすればいいのでしょうか int c; int a; c=12345; a=printf("%d",c); とするとaに桁数は入るのですが cがPRINTF関数により表示されてしまいます どうすればいいでしょうか? わかる方はおしえてください、おねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#25358
noname#25358
回答No.1

 sprintf 関数というのがあります。  printf 関数とまったく同じですが、結果を変数に出力する点が違います。  char dummy[10];  int c, a;  c=12345;  a=printf(dummy, "%d",c);  この dummy 変数には文字列 "12345" が入りますが、使わなければどうということはないです。  C言語を使い始めてそろそろ10年になりますが、sprintf をこんなふうに使おうとは思いもしませんでした(^_^;  なんか反則っぽいですけど、合理的ですね(笑)  ちなみに、答えが0になるまで10で割っていって、割ることができた回数を数えるのが普通のやりかたです。

その他の回答 (3)

noname#2009
noname#2009
回答No.4

-------------------------------------- int c; int a; c=12345; for(a = 0; c != 0; a++) c /= 10; printf("答え…%d桁", a);//omake -------------------------------------- お好きな方法でどうぞ。。。

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

桁数を求めたいなら、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)
回答No.2

sprintf でダミーのバッファに出力。

関連するQ&A