我必须提交此代码,目的是计算一个数字并打印出来(范围是-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
}
}
但是提交的内容总是给我一个错误,有些数字不正确,我无法弄清。
答案 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
(不正确)。