• ベストアンサー

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

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

noname#32059
noname#32059

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

  • ベストアンサー
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

  • C言語のprintfで桁数をそろえる

    次ので桁数をそろえると書いてあったけどやってみたらできなかった。 コンパイラはMS visual c++バージョンはおそらく7.1.3019 #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int a; scanf("%d",&a); printf("a=%3d\n",a); return 0; }

  • 桁数を求めるプログラム。

    入力した数字の桁数を表示させるというプログラムを考えています。 例) 135 この数字の桁数は3桁です。 などと表示させたいと思っています。 それで、私は入力した数値を10で割っていって入力した数値aがa<=0になったらループを終了して 何回ループしたかのカウンタで桁数を表示させようかと考えました。 たとえば135→13.5→1.35→0.135で整数部分が0となるのでループを打ち切って 3回繰り返したので3桁と表示させたいと思いました。 それでプログラムを考えてみたのですが、どうにもうまくいきいません。 どのように修正したら桁数が表示できるようになるでしょうか? #include <stdio.h> main() { double a=0; int n=1; scanf("%d",&a); while(1) { a=a/10.0; if(a<=0){ break; } n++; } printf("その数は%d桁です。\n",n); }

  • C言語の問題で困っています。

    C言語の問題で困っています。 誰か教えてください。 下の問題ですが、intがiだけでプログラムするにはどうしたら良いでしょうか? (a)から(d)に入るプログラムをすいませんが教えてください。 お願いします。 【問題】 1以上10以下の整数を昇順に区切って表示するプログラムです。 実行例 1 2 3 4 5 #include <stdio.h> int main (void) { int i; (A) while ((b)){ (c); (d); } printf("¥n"); return(0); }

  • C言語 関数の問題

    C言語(関数の問題)で読み込んだ4つの整数の最大値を求めプログラムで 整数を2つペア比較し、関数の入れ子を用いて最大値を見つけて、表示する。 というプログラムを作成したいのですが #include<stdio.h> int maxof(int a, int b) { if(a > b) return (a); else return (b); } int max4(int a, int b, int c, int d) { max(max(a, b), max(c, d)); } int main(void) { int num1,num2, num3, num4; ------ 整数の読み込み printf("最大値は%dです。", max4(num1, num2, num3, num4)); return(0); } と記述すると、上手くいったのですが これを max関数だけを用いて作成できますでしょうか? 整数の比較は全てmax関数で行いたいです。

  • C言語超初級

    はじめまして。 自分は大学入ってからC言語を勉強しています。 授業で課題が出ているのですが難しくてどうすればいいかわかりません。 プロの皆さんには楽勝だと思いますがよろしくおねがいします。 内容 いろいろ計算して出てきた商品価格(例えば1234567円)に位取りのカンマを挿入して表示する関数(int型の最大桁数である10桁の数値まで表示できるようにすること)を作成する。 1234567→1,234,567 見たいな感じです。 自分でも考えたいのでよろしかったら考え方みたいなのをヒントください。 ちなみにこの一ヶ月でならったことは int,float,char,if,for,swhitch,while,scanf,printf,簡単な関数の作り方くらいです。数少ない武器ですがこれらの道具でお願いします。 胸を貸してください。

  • C言語のポインタについての質問です。

    C言語のポインタについての質問です。 2つのプログラムを作り、片方で数値を入力し、 もう片方でその数値を読み取りたいと思っています。 数値入力のプログラムは次のようになっています。 #include<stdio.h> void main(void){ int A=1; int *p; p=&A; printf("%p\n",p); } この実行結果は「0012FF88」となりました。 次にこの「0012FF88」というアドレスを使って「1」を読み取る 別のプログラムを作りたいと思っています。 #include<stdio.h> void main(void) { int add; int a; printf("アドレスは?\n"); scanf("%x",&add);    //「0012FF88」と入力 a=*(int*)add; printf("%x---->%d",&add,a); } このようなプログラムを作ってコンパイルできたのですが、 実行してアドレスを打ち込むと「Win32の例外が発生しました」 となって実行できません。 何かよい方法やプログラムの問題などありましたら 教えて頂けませんか?

  • C言語(高校1年の内容)について

    C言語のプログラムが分かりません。教えて下さい。 --------------------------------------- 課題3(kadai3.c) 次のプログラムでは、割り算が正しく行われないので、直しなさい。 LIST 3-1 1 /* 1500 工業太郎 */ 2 #include <stdio.h> 3 int main(void) 4 { 5 int a,b,wa,sa,seki,syo; 6 printf("数値を一つ入力してください ->"); 7 scanf("%d", &a); 8 printf("数値をもう一つ入力してください ->"); 9 scanf("%d", &b); 10 wa = a + b; 11 sa = a - b; 12 seki = a * b; 13 syo = s / b; 14 printf("a + b = %d\n", wa); 15 printf("a - b = %d\n", sa); 16 printf("a * b = %d\n", seki); 17 printf("a / b = %d\n", syo); 18 return 0; 19 } --------------------------------------- といった内容です。本当によく分かりません。助けて下さい。

  • 現在、C言語を習っています。

    現在、C言語を習っています。 今、関数を勉強しているんですがわからない文があるので正解の文を教えてください。 #include <stdio.h> int main (void) { int a=123; doubke b=4.5; printf("%d\n○○" ,a,b); return 0; } ○に入る言語や文が間違っていたら教えてください。

  • プログラミングC言語の問題ですがわかりません。

    プログラミングC言語の問題ですがわかりません。 5つのint型変数a,b,c,ans,responseを宣言する。a,b,cの値はscanf関数で読みこむことにより初期化する。 a(1)b(2)c= と表示して、scanf関数によりユーザーの答案をresponseに読み込み、演算結果が正しければ1、間違っていたら0を表示するプログラムを作成しなさい。ここで(1)と(2)には算術演算子(+,-,*,/,%)がはいる。5×5=25通りの演算をすべて実行するようにしなさい。 特に正しければ1、間違っていたら0を表示するプログラムがわかりません。 まだprintfとscanf関数と演算子しかやっていないのでそれを踏まえたプログラムを1通りだけでいいので書いて頂けると幸いです。

  • c言語なのですが

    c言語なのですが #include<stdio.h> main() { int a; printf("整数を5回足し算する\n"); scanf("%d %d",&a); printf("a*5=%d\n",a*5); return(0); } でエラーが起こります どこを修正すればいいのでしょうか

専門家に質問してみよう