1

私はこのような番号を持っています:int num = 36729;そして私は番号を構成する桁数(この場合は5桁)を取得したいと思います。

これどうやってするの?

4

9 に答える 9

10

次の式を使用します。

if(num)
  return floor(log10(abs((double) num)) + 1);

return 1;
于 2012-06-04T18:39:20.243 に答える
2
int digits = 0;
while (num > 0) {
  ++digits;
  num = num / 10;
}
于 2012-06-04T18:39:16.570 に答える
1
int unsigned_digit_count(unsigned val) {
    int count = 0;
    do {
        count++;
        val /= 10;
    } while (val);
    return count;
}

int digit_count(int val) {
    if (val < 0) {
        return 1+unsigned_digit_count(-val); // extra digit for the '-'
    } else {
        return unsigned_digit_count(val);
    }
}
于 2012-06-04T20:46:38.547 に答える
1
  1. 任意の基数の整数nの桁数は、完了するまで除算することで簡単に取得できます。
unsigned int number_of_digits = 0;
do {
    ++number_of_digits; 
    n /= base;
} while (n);
  1. 必ずしも最も効率的ではありませんが、C++を使用して最も短くて読みやすいものの1つです。 std::to_string(num).length()

  2. そして、それを行うためのはるかに良い方法があります:

#include<cmath>
...
int size = trunc(log10(num)) + 1
...
于 2020-11-17T14:19:39.873 に答える
0
int findcount(int num) 
{ 
    int count = 0; 
    if(num != 0){
      while(num) { 
          num /= 10; 
          count ++; 
      } 
      return count ; 
    }
    else
      return 1;
} 
于 2012-06-04T19:05:50.447 に答える
0

ヒント:/%演算子を使用してください。

于 2012-06-04T18:38:47.370 に答える
0

0以外の入力については、入力の絶対値の常用対数を計算し、その結果の下限を取り、1を加算します。

int dig;
...
if (input == 0)
  dig = 1;
else
  dig = (int) floor(log10(abs((double) input))) + 1;

0は特殊なケースであり、個別に処理する必要があります。

于 2012-06-04T19:39:46.620 に答える
0

非効率的ですが、奇妙なことにエレガントです...

#include <stdio.h>
#include <string.h>

int main(void)
{
    // code to get value
    char str[50];
    sprintf(str, "%d", value);

    printf("The %d has %d digits.\n", value, strlen(str));

    return 0;
}
于 2012-06-04T19:55:11.700 に答える
-1

あなたはこれを行うことはできませんか?

    int num = 36729;
    num.ToString().Length
于 2012-06-04T19:55:06.643 に答える