プロが教える店舗&オフィスのセキュリティ対策術

C言語で数値の桁数を求めるプログラムをもとめたいのですが
どうすればいいのでしょうか
int c;
int a;
c=12345;
a=printf("%d",c);

とするとaに桁数は入るのですが
cがPRINTF関数により表示されてしまいます

どうすればいいでしょうか?
わかる方はおしえてください、おねがいします。

A 回答 (4件)

 sprintf 関数というのがあります。


 printf 関数とまったく同じですが、結果を変数に出力する点が違います。

 char dummy[10];
 int c, a;
 c=12345;
 a=printf(dummy, "%d",c);

 この dummy 変数には文字列 "12345" が入りますが、使わなければどうということはないです。

 C言語を使い始めてそろそろ10年になりますが、sprintf をこんなふうに使おうとは思いもしませんでした(^_^;
 なんか反則っぽいですけど、合理的ですね(笑)

 ちなみに、答えが0になるまで10で割っていって、割ることができた回数を数えるのが普通のやりかたです。
    • good
    • 0

--------------------------------------


int c;
int a;
c=12345;
for(a = 0; c != 0; a++)
c /= 10;

printf("答え…%d桁", a);//omake

--------------------------------------

お好きな方法でどうぞ。。。
    • good
    • 0

桁数を求めたいなら、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を使うのも面白いですが、普通はこれで十分です。
こっちの方が安上がりだしね。
    • good
    • 0

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

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング