简单C程序,未知输出

时间:2015-07-23 16:32:03

标签: c arrays int long-integer

问题陈述

您将获得一个大小为整数的数组。您需要打印数组元素的总和。

注意:带符号的32位整数值使用位来表示数字的符号,使用剩余的31位来表示幅度。 32位整数的范围是。当我们添加几个整数值时,结果总和可能会超出此范围。您可能需要在C / C ++中使用long long int或在Java中使用长数据类型来存储此类总和。

输入格式

输入的第一行包含一个整数。下一行包含描述数组的空格分隔整数。

约束

输出格式

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

样本输入

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;
}

错误说明

输入(stdin):

5
1000000001 1000000002 1000000003 1000000004 1000000005

您的输出(标准输出):

140692151765426

预期产出:

5000000015

编译器消息:

Wrong Answer

5 个答案:

答案 0 :(得分:3)

这很好用:

#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 :(得分:2)

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

#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;
}

答案 2 :(得分:1)

该计划有以下问题:

  1. 数组索引错误:数组大小为5,从0开始,只能使用[4],但对于scanf(),它会尝试读取值为&amp; a [5]。< / p>

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

  3. for (i = 0; i < n; i++ ) {
      scanf("%ld",&a[i]);
    }
    
    1. 总和包括:sum = sum + a [i];

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

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

    3. 希望这可以回答您对意外输出的疑问。

答案 3 :(得分: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;
}

答案 4 :(得分:-1)

#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;
}