我有一个这样的数字:int num = 36729;
我希望得到组成数字的位数(在这种情况下是5位数)。
我该怎么做?
答案 0 :(得分:9)
使用此公式:
if(num)
return floor(log10(abs((double) num)) + 1);
return 1;
答案 1 :(得分:2)
int digits = 0;
while (num > 0) {
++digits;
num = num / 10;
}
答案 2 :(得分:1)
提示:使用/
和%
运算符。
答案 3 :(得分: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);
}
}
答案 4 :(得分:1)
unsigned int number_of_digits = 0;
do {
++number_of_digits;
n /= base;
} while (n);
不一定是最高效的,但它是使用C ++的最短且最易读的代码之一:
std::to_string(num).length()
还有一种更好的方法:
#include<cmath>
...
int size = trunc(log10(num)) + 1
...
答案 5 :(得分:0)
int findcount(int num)
{
int count = 0;
if(num != 0){
while(num) {
num /= 10;
count ++;
}
return count ;
}
else
return 1;
}
答案 6 :(得分:0)
对于0以外的任何输入,计算输入绝对值的以10为底的对数,取该结果的最低值并加1:
int dig;
...
if (input == 0)
dig = 1;
else
dig = (int) floor(log10(abs((double) input))) + 1;
0是特殊情况,必须单独处理。
答案 7 :(得分: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;
}
答案 8 :(得分:-1)
你不能这样做吗?
int num = 36729;
num.ToString().Length