简单的 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
(无符号)转换一起使用
该程序存在以下问题:
数组索引错误:数组的大小为 5,从 0 开始,您只能使用直到 a[4],但对于 scanf() ,它会尝试将值读取为 &a[5] .
在使用硬编码索引 a[1]、a[2] 等时不使用 for 循环。相反,下面的代码将更好地获得如下输入:
for (i = 0; i < n; i++ ) {
scanf("%ld",&a[i]);
}
总和包括:sum = sum + a[i];
当 i = 0 --> a[0] 将具有垃圾值,因为输入不是从用户那里获取的,因为 scanf 从 a[1] 开始。由于数组未初始化,这是未初始化的自动变量,它可能有垃圾值,这些值将被添加到总和中。
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;
}
问题陈述
给你一个大小为 的整数数组。您需要打印数组元素的总和。
注意:有符号的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
(无符号)转换一起使用
该程序存在以下问题:
数组索引错误:数组的大小为 5,从 0 开始,您只能使用直到 a[4],但对于 scanf() ,它会尝试将值读取为 &a[5] .
在使用硬编码索引 a[1]、a[2] 等时不使用 for 循环。相反,下面的代码将更好地获得如下输入:
for (i = 0; i < n; i++ ) {
scanf("%ld",&a[i]);
}
总和包括:sum = sum + a[i];
当 i = 0 --> a[0] 将具有垃圾值,因为输入不是从用户那里获取的,因为 scanf 从 a[1] 开始。由于数组未初始化,这是未初始化的自动变量,它可能有垃圾值,这些值将被添加到总和中。
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;
}