我已经为OJ问题编写了一个程序(第一个),但是输出不正确。然后在网上,我找到了第二个程序,看起来几乎和我的一样,但是输出却不一样!谁能帮助我知道我在哪里出错?提前致谢。
注意:我在同一编译器中运行了这两个程序
输入为
3
5
51927 56551 48919
14433 22446 13324
85506 99376 63634
93997 63631 83866
41720 16645 16267
4
34401 73409 48126
80906 29491 46483
79890 23963 57954
67975 70273 65231
4
17044 82753 40300
30368 51031 96851
10353 81816 19296
94218 83673 18672
第一个密码(矿山)
#include<iostream>
using namespace std;
int main()
{
int n, f;
cin>>n;
while(n--)
{
cin>>f;
long long total=0;
int area;
int animals, enviroment;
for(int i=0;i<f;i++)
{
cin>>area>>animals>>enviroment;
total+=enviroment*area;
}
cout<<total<<endl;
}
}
第二个密码(在线)
#include<cstdio>
using namespace std;
int main(){
int T,f,a,b,c;
long long sum;
scanf("%d",&T);
for(int i=0;i<T;i++){
scanf("%d",&f);
sum=0;
for(int j=0;j<f;j++){
scanf("%d %d %d",&a,&b,&c);
sum+=(long long)a*c;
}
printf("%lld\n",sum);
}
return 0;
}
我的输出(对于第一个程序)
-444446533
1595456521
1292087056
在线输出(接受第二个程序)
16735422651
14480358409
5587054352
答案 0 :(得分:3)
enviroment
和area
均为int
,这大概意味着它们是32位值,可以存储-2,147,483,648到2,147,483,647(含)之间的值。
两个较大的值相乘可以超出此范围。例如,对2,147,483,647进行平方运算将得出一个值,该值需要存储32位以上。超出此范围将导致不确定的行为。
long long
是(至少)64位,并且可以存储-9,223,372,036,854,775,808到9,223,372,036,854,775,807(含)之间的值。它足够大,可以容纳2,147,483,647平方的值。
因此,您需要确保使用long long
变量来完成乘法。您可以通过在乘法之前将enviroment
和/或area
强制转换为long long
到long long
来做到这一点,也可以将它们enviroment
制成。 / p>
P.S。 thank-you
拼写错误(它缺少 n :enviro n 项)。