• ベストアンサー

任意の桁数を表示するには?

配列の中に格納されている桁に応じて表示のしかたを変えたいのです。 最大で3桁の数字が入っていたら、3桁表示に、 最大で5桁の数字が入っていたら、5桁表示に、 つまり int a[]={1,100,1,1}; の時は printf("%3.d "); と表示し、 int a[]={1,100,1,10000}; の時は printf("%5.d "); と表示するように、桁数に応じて%x.dのxの部分を変更したいんです。 どうしたらいいでしょうか。

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

printf("%*.d",x,n); で桁数をx桁と変数で指定できるので(参考URLの3-7参照)、あとは何らかの方法で配列から最大値を取り出して(そこは難しくないので考えてください)、その桁数を(int)log10()などとして取得すればいいのではないでしょうか。

参考URL:
http://c-production.com/contents/c/sec03.html

その他の回答 (3)

  • f_attck
  • ベストアンサー率33% (40/118)
回答No.4

printf("%#d"); で上手くいきません? %#xとかやると16進でうまいこといくんですが、dだとどうかは わかりません。やってみてください。

Directxq
質問者

お礼

#1~#4様、ありがとうございました! printf("%*.d",x,n);でうまくいきました! また、ログを使うことで桁数計算できるんですね! ありがとうございました。

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.3

と 回答しましたが これ本来変える必要有るのですか? プリントユージングを指定すればいいのでは?

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.2

数学的に処理するなら ・10の自然定数を底にしたログを計算し出来るだけ精度の良い小数値の形で定数として登録する ・桁数の知りたい値も同様に計算し精度の良い変数に格納する ・後者を前者で割る この商の整数部がこの場合の桁数に当たります 因みに最初の定数の10を2に変えると2進で何桁かに 8に変えると8進で何桁かに Nに変えるとN進で何桁かに変わります

関連するQ&A

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

    入力した数字の桁数を表示させるというプログラムを考えています。 例) 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 c; int a; c=12345; a=printf("%d",c); とするとaに桁数は入るのですが cがPRINTF関数により表示されてしまいます どうすればいいでしょうか? わかる方はおしえてください、おねがいします。

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

    すいません。疑問解決と思ったのですがまた新たな疑問が浮上してきました。 #include <stdio.h> main() { int a=0; int n=1; scanf("%d",&a); while(1) { a=a/10; if(a<1){ break; } n++; } printf("その数は%d桁です。\n",n); } のプログラムで10桁まではうまく表示できるようになったのですが、11桁以上が表示できません。 10桁以上を入力してもなぜか1桁とか10桁とかになってしまいます。 その原因はどこにあるのでしょうか?

  • 有効桁数について

    ある数値を5回測定したとします A 5.039 B 5.075 C 5.092 D 5.064 E 5.058 有効桁数はすべて4桁ですよね? 次にA~Eの平均を取ると (A+B+C+D+E)/5=5.0656 と関数電卓で結果がでますが、4桁に丸めて5.066とすれば有効桁数の扱い方としては問題ないですか? そしてA~Eの平均の2乗をするときは、上記の平均を有効桁数4桁に丸めた5.066を2乗して (5.066)^2=25.664356 となり、そして5.066の有効桁数4桁に合わして25.66とすればいいのでしょうか? それとも平均の値を4桁に丸める前の電卓で出た値のまま2乗した後、最終的に4桁に丸めるのがいいのでしょうか?この数値だとどちらでやっても4桁にした値は変わりませんが・・・ 有効桁数の扱い方で問題があったら教えてください、また平均の2乗を求めるときはどちらが正しいのでしょうか? (平均の値の2乗は平均×平均なのだから平均の値を4桁にせず5桁として計算すると平均の2乗は有効桁数5桁と考えるので、やはり正しく平均の値を測定値の有効桁数4桁に丸めて出した平均の値を2乗する方が正しいですかね・・・)    また、上記の平均の計算をしたときのよな、「5」などの数字の有効桁数は何桁ですか?1桁なんでしょうか?もし1桁なら割り算をしているので有効桁数はいちばん桁数の少ないものに合わせるので有効桁数1となると平均の値が「5」となりおかしいとおもうんですが・・・ 上記の平均を取ったときの「5」や、測定回数の数値や、測定していない数で100で割れと書いてあったりしたときは、それらの数字の桁数も考えなければならないんでしょうか? 読みづらい文章かもしれませんが、ご回答待っています。

  • Excelで任意の桁数で四捨五入させその桁数以下は表示させたくない場合

    Excelで任意の桁数で四捨五入させその桁数以下は表示させたくない場合はどのようにしたらいいでしょうか? 具体的には、売上の数字の百桁目を四捨五入させ、かつ表示では下3桁はカットし(千円)で表示させます。欲を言うと、桁区切りは残したいです。 とても困ってます。 Excel2007です。

  • 桁数の求め方(マクロ)

    セルA1に数字(0より大きい数字で、小数もありうる)が入っているものとします。 これの桁数を求めたいのです。 たとえばA1の値が 3なら   → 1 25なら   → 2 392なら  → 3 501.57なら → 3 という感じです。 ただし1より小さい小数の場合は 0.25なら  → -1 0.096なら → -2 0.00056なら→ -4 としたいです。 要するにA1の数値に対して、0以外の数値が 何桁目で初めて出てくるか、ということを調べたいです。 (説明が分かりにくく、申し訳ありません。) =ROUNDDOWN(LOG10(A1),0)+1 であれば1より大きい数字は対応できます。 しかし1より小さい数字の場合は不具合が起きます。 そのため、 if文を使い、int(A1)が0かどうか判定 0でなければ→=ROUNDDOWN(LOG10(A1),0)+1を使用 0であれば→A1の値に10をかけたものについてintをとり、0でなければ-1を出力。0であればさらに10をかけintをとり、0でなければ-2を出力。0であれば・・・・のループ 等の手順を考えてみましたが、どうにもスマートでなく・・・。 何か良い解決策はありませんでしょうか。 お手数をおかけしますが、 ご教授願えればと思います。 よろしくお願いいたします。

  • エクセルでの桁数の違う小数の表示方法?

    エクセルでの小数点以下の桁数が異なる数字で四捨五入して連続する0以外の数字が2桁までに表示する方法を教えてほしいのですが・・・ 説明の仕方がわかりずらいので例をあげると、 1.25なら1.3 0.2274なら0.23 0.000304なら0.0003 となるようにしたいのですが、それぞれ桁数が違うので一度にできません。A4サイズで100以上あるので最初に設定するか、範囲指定をすべての数字にして一度で変換するする方法がよいのですが・・・ よろしくおねがいします。

  • 数字の桁数を揃えたい(0→01のように)

    数字をalert文で表示するときに、 桁数を2桁で出力したいのですが、どのような方法を取るのが良いでしょうか? 数字が1桁(0~9)の時に先頭に0を付けたいのです。

  • 線形探索法のプログラムについて

    配列Aに格納されている数字を検索するプログラムより、 Aのプログラムでは配列Aに格納されている数字を検索(scanf("%d" , j)で入力)した にもかかわらず、「該当するデータがありませんでした」と表示されてしまいます。 Bのプログラムでは、配列Bに格納されている数字を検索(scanf("%d" , j)で入力)すると 「該当するデータがありました」と表示されます。 Aのプログラムで、------でかこってある部分に問題があると思われ、 いろいろと試してみましたが、未だにその理由をつかむことができません。 その理由を知りたく、書き込みを致しました。 ご教授の程宜しくお願い致します。 A. main(){ int i , j; int k = 0; int A[5] = {4 , 1 , 3 , 4 , 5}; printf("検索する数値を入力してください > "); scanf("%d" , j); --------------------------------------------------------------- for(i=0 ; i<5 ; i++){ if(A[i] == j){ printf("該当するデータはあります"); k++; } } --------------------------------------------------------------- if(k <= 0){ printf("該当するデータがありませんでした\n"); } return; } B #include<stdio.h> main(){ int i , j , k; int A[5] = {4 , 1 , 3 , 4 , 5}; printf("検索する数値を入力してください > "); scanf("%d" , j); for(i=0 ; i<5 ; i++){ if(A[i] == j){ k++; } } if(k>0){ printf("該当するデータはありました"); }else{ printf("該当するデータはありませんでした"); } return; }

  • 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; }

専門家に質問してみよう