我是C的新手(一般编程,使用Python减去几周)。我有兴趣了解如何在机器级别处理信息,因此我转移到C.目前,我正在解决一些简单的编码挑战,并且无法找到解决当前问题的信息。
挑战是从输入中将N个大整数转换为数组并打印数字的总和。由于Python代码的简化性质,从Python到C的转换实际上比我预期的要困难。
以下代码的示例输入:
5
1000000001 1000000002 1000000003 1000000004 1000000005
预期产出:
5000000015
代码:
int main() {
long long unsigned int sum = 0;
int nums[200], n, i;
scanf("%i", &n);
for (i = 0; i =! n; i++) {
scanf("%i", &nums[i]);
sum = sum + nums[i];
}
printf("%llu", sum);
return 0;
}
该程序似乎接受N的输入,但它停在那里。
最后一个问题,简单来说,有符号和无符号变量之间有什么区别?
答案 0 :(得分:4)
像这样改变你的for循环
for (i = 0; i != n; i++) {
scanf("%i", &nums[i]);
sum = sum + nums[i];
}
如果您说i =! n
与i = !n
相同。这样做的目的是将n
的否定值分配给i
。由于您为n
提供了非零值,因此结果为零,循环终止。
欢迎来到C!
关于签名与未签名的问题。签名类型可以有负值,而无符号则不能。但它们都占用了内存中相同的空间(位数)。例如,假设两个补码表示和一个32位整数,值的范围是
singed : -2^31 to 2^31 - 1 or –2147483648 to 2147483647
unsigned : 0 to 2^32 - 1 or 0 to 4294967295