2017-07-09 4 views
-2

strlen()関数を使用して文字列内の文字数を取得できることは知っていますが、整数で使用される数字の数を取得するにはどうしたらいいですか?整数で使用される桁数をC言語で取得する方法は?

が変数aに保存されている1000年で、その変数が整数型の場合と同様に、私は数の長さを取得したい、それが4

+3

これはプログラミングに関する質問よりも数学的な問題です。対数で読み上げる。 –

答えて

2

が何を求めていることはの数であります小数点以下はです。整数はバイナリ形式で格納されているので、それを決める組み込みの方法はありません。あなたは小数点以下の桁数をカウントするために行うことができますことは、私はあなたが望む理解できる限り、私は右のあなたの質問を得た場合は、10

int count = 1; 
while (a >= 10) { 
    a /= 10; 
    count++; 
} 
2

本当にわからないことで分割できる回数を数えるが、あなたの例を与えています(たとえば、1は1桁、10は2桁、100は3桁などがあります)。あなたが知っている場合は数値が正である、またはあなたがカウントに含まれるマイナス記号たい

#include <stdio.h> 
int main(void){ 
    int numberOfDigits = 0, value; 
    scanf("%d", &value); //you scan a value 
    if (value == 0) 
     numberOfDigits = 1; 
    else{ 
     while (value != 0){ 
      numberOfDigits++; 
      value = value/10; 
     } 
    } 
    printf("Number of digits: %d\n", numberOfDigits); 
    return 0; 
} 
3

:あなたは数が必要な場合

snprintf(NULL, 0, "%d", a); 

をあなたはこのようなものを使用してそれを達成することができます数値の絶対値の桁:

snprintf(NULL, 0, "+%d", a) - 1; 

これらの両方のソリューションへの鍵はsnprintfバッファがWRに十分な大きされていたことが書かれていたバイト数を返すことですそれに入る。バッファを与えていないので、書かれたバイト数を返す必要があります。これは書式化された数値のサイズです。

log10(log10を使用している場合は、整数に切り捨てるのではなく丸めて、正確に二重に変換できない大きな整数に注意することを忘れないでください。それらは53個以上の仮数ビットを必要とするため)、ループを書く必要はありません。

関連する問題