简单的 C 程序,未知输出

Simple C Program, Unknown output

问题陈述

给你一个大小为 的整数数组。您需要打印数组元素的总和。

注意:有符号的32位整数值用bit表示数字的符号,其余31位表示大小。 32 位整数的范围是 .当我们添加多个整数值时,所得总和可能会超出此范围。您可能需要在 C/C++ 中使用 long long int 或在 Java 中使用长数据类型来存储此类总和。

输入格式

输入的第一行包含一个整数。接下来的行包含 space 个描述数组的分隔整数。

约束

输出格式

输出等于数组元素总和的单个值。

示例输入

5
1000000001 1000000002 1000000003 1000000004 1000000005`

示例输出

5000000015

我的程序

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

int main() {

    int n,i;
    scanf("%d",&n);
    long int a[5],sum;
    for(i=0;i<=n-1;i++){
        scanf("%ld %ld %ld %ld %ld",&a[1],&a[2],&a[3],&a[4],&a[5]);
    }
    for(i=0;i<=n-1;i++){
        sum = sum + a[i];
    }
    printf("%ld",sum);
    return 0;
}

错误描述

输入(标准输入):

5
1000000001 1000000002 1000000003 1000000004 1000000005

你的输出(标准输出):

140692151765426

预期输出:

5000000015

编译器消息:

Wrong Answer

这里基本上不需要数组。刚刚

#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);
    long long int a, sum = 0;
    while (n--) {
        scanf("%lld", &a);
        sum += a;
    }
    printf("%lld", sum);
    return 0;
}

这很好用:

#include <inttypes.h>
int main()
{
  int n,i;
  scanf("%d",&n);
  unsigned long long int a[5];
  unsigned long long int sum=0;
  for(i=0;i<n;i++)
  {
    scanf("%llu",&a[i]);
  }
  for(i=0;i<n;i++)
  {
    printf("%llu\n",sum);
    sum = sum + a[i];
  }
  printf("\nSum is : %llu",sum);
  return 0;
}

ll long-long 修饰符与 u(无符号)转换一起使用

该程序存在以下问题:

  1. 数组索引错误:数组的大小为 5,从 0 开始,您只能使用直到 a[4],但对于 scanf() ,它会尝试将值读取为 &a[5] .

  2. 在使用硬编码索引 a[1]、a[2] 等时不使用 for 循环。相反,下面的代码将更好地获得如下输入:


for (i = 0; i < n; i++ ) {
  scanf("%ld",&a[i]);
}

  1. 总和包括:sum = sum + a[i];

    当 i = 0 --> a[0] 将具有垃圾值,因为输入不是从用户那里获取的,因为 scanf 从 a[1] 开始。由于数组未初始化,这是未初始化的自动变量,它可能有垃圾值,这些值将被添加到总和中。

  2. sum 本身也未初始化,因此它将包含垃圾值,并且对于第一次添加:sum = sum + a[0];这个垃圾值将被添加。

希望这能回答您对意外输出的查询。

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

int main() {

    int n,i;
    scanf("%d",&n);
    long int a[10];
    long long sum=0;
    for(i=0;i<=n-1;i++){
        scanf("%ld",&a[i]);
    }
    for(i=0;i<=n-1;i++){
        sum = sum + a[i];
    }
    printf("%ld",sum);
    return 0;
}
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main(){
    int n,i;
    cin >> n;
    long long int s=0;
    long int a[10];
    if(n>=1 && n<=10)
        {
        for(i=0;i<n;i++)
            {
            cin>>a[i];
            s=s+a[i];
        }
    }
    cout<<s;

    return 0;
}