这些代码之间的区别在哪里?输出不应该是一样的吗?

Where is the difference between these code? Shouldn't output be the same?

本文关键字:一样 输出 代码 之间 区别 在哪里 不应该      更新时间:2023-10-16

我已经为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

enviromentarea都是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(。