打印整数位数

时间:2019-02-19 23:40:24

标签: c

我必须提交此代码,目的是计算一个数字并打印出来(范围是-2 31 +1到2 31 - 1),并且结果必须显示为一个数字(例如,给定的数字234显示3)

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    long int num_ins;
    int contador = 0;

    printf("Inserir numero desejado a avaliar?\n"); // asking the number
    scanf("%ld", &num_ins);

    if (num_ins == 0) {
        printf("%d", 1);
    } else {
        while (num_ins != 0) {
            num_ins = num_ins / 10;
            contador++;
        }
        printf("%d", contador); //contador is count
    }
}

但是提交的内容总是给我一个错误,有些数字不正确,我无法弄清。

1 个答案:

答案 0 :(得分:0)

首先,如果使用32位数据类型,则范围将为-2^31 to 2^31 -1

因此,最大正数为2^31 = 2147483647,最小为-2147483648

long int有时为64位(就像在我的PC上一样),因此其范围将改变。最大值将是9223372036854775807

根据您的代码

  • 如果输入为2147483647,则输出= 10。 (正确)。

  • 如果输入为9223372036854775807(最大有效值),则输出=
    19(正确)。

  • 如果输入为92233720368547758078(超过最大有效值且位数为20),则
    输出= 19(不正确)。