获取int数字的数量

时间:2016-02-18 11:31:46

标签: c function digits

我正在使用fscanf(fp, "%d", &n)函数从文件中读取整数。

有没有办法知道没有循环的数字有多少位?

10 个答案:

答案 0 :(得分:4)

您可以尝试:

int count = 0;
fscanf(fp, "%d%n", &n, &count);

%n说明符输入count到目前为止读取的字符数。

但是,这个数字可能比n的位数大,因为%d说明符允许在读取数字之前跳过空白字符。

检查@ pmg的answer以了解如何计算这些空格。

答案 1 :(得分:3)

int optionalwhitespace, characters;
if (fscanf(fp, " %n%d%n", &optionalwhitespace, &n, &characters) != 1) /* error */;
characters -= optionalwhitespace;
// characters now has the number of characters read to interpret the value in n

答案 2 :(得分:2)

是的,将其作为字符串阅读:

char buffer[256];
fscanf(fp, "%s", buffer);
int length = strlen(buffer);

注意:如果是负数,您可能需要对-符号进行折扣...

假设你仍然想要整数值:

int n = atoi(buffer);

答案 3 :(得分:1)

使用log函数:

int number_of_digits(unsigned int i)
{
    return (int)(log(i+1) / log(10)) + 1;
}

int main (void)
{
    int i = 52;
    printf("%d has %d digits\n", number_of_digits(i));
}

答案 4 :(得分:1)

对于代码高尔夫球场方法,只需返回snprintf()

的值
width = snprintf(0, 0, "%u", (unsigned) n);

答案 5 :(得分:0)

您可以使用snprinf,这是比itoa更好的选择:

int x = 0;
scanf( "%d", &x );
char buffer[20] = "";
snprintf(buffer, sizeof(buffer), "%d", x);
printf( "num of digits = %d", strlen(buffer) );

答案 6 :(得分:0)

试试这个:

#include <math.h>
number > 0 ? (int) log10 ((double) number) + 1 : 1;

答案 7 :(得分:0)

您可以只计算该数字的log10并将其四舍五入:

int length = ceil(log10((double)n)) + 0.5;

+ 0.5用于将浮点数转换为整数,因为像3这样的数字不能在浮点表示中显式写入(int)3.0可能会产生2.我假设ceil没有' t通过0.5返回答案,这是永远不会发生的。

答案 8 :(得分:0)

  

有没有办法知道没有循环的数字有多少位?

递归解决方案

unsigned digit_count(unsigned x) {
  if (x >= 10) return digit_count(x /10) + 1;
  return 1;
}

答案 9 :(得分:-1)

#include<math.h>

//rest of program
fscanf(fp, "%d", &n)
int length = (int)(log10(n)) +1;
//rest of program