在无结果的C结果中添加来自数组的大Ints

时间:2015-11-19 14:45:09

标签: c arrays

我是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的输入,但它停在那里。

最后一个问题,简单来说,有符号和无符号变量之间有什么区别?

1 个答案:

答案 0 :(得分:4)

像这样改变你的for循环

for (i = 0; i != n; i++) {
    scanf("%i", &nums[i]);
    sum = sum + nums[i];
}

如果您说i =! ni = !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