这些代码之间的区别在哪里?输出不应该是一样的吗?
Where is the difference between these code? Shouldn't output be the same?
我已经为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("%lldn",sum);
}
return 0;
}
我的输出(用于第一个程序(
-444446533
1595456521
1292087056
在线输出(从第二个程序,接受(
16735422651
14480358409
5587054352
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
拼写错误(它缺少一个n:environment(。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 将值从二维数组输出到文本文件
- 这些代码之间的区别在哪里?输出不应该是一样的吗?
- 在Qt中:我可以输出到“stdout”吗,就像使用qDebug()输出到“stderr”一样简单
- 为什么重新执行我的多线程代码后输出不一样
- 如何在windows中的gcc中逐行读取命令输出,就像使用标准输入一样
- 伪随机数生成器给出相同的第一个输出,但随后的行为和预期的一样