Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 若我取A=10^9和B=10^9,那个么下面的代码将给出负输出。为什么?它为我提供了小整数的正确输出_C++_Multiplication - Fatal编程技术网

C++ 若我取A=10^9和B=10^9,那个么下面的代码将给出负输出。为什么?它为我提供了小整数的正确输出

C++ 若我取A=10^9和B=10^9,那个么下面的代码将给出负输出。为什么?它为我提供了小整数的正确输出,c++,multiplication,C++,Multiplication,A和B是介于1到10^9之间的整数, pairs是一个包含表达式((a/2)(B/2)+((a-(a/2))(B-(B/2))值的变量 #包括 使用名称空间std; int main() { int T; cin>>T; 而(T--) { 长int A,B; cin>>A>>B; 在许多实现中,C++中的长INT/COD>只是32位数字,最大值是2147483647。因此,如果A是10 ^ 9和B也是10 ^ 9,它们的乘积超出32位数字的最大值(实际上A和B可以比10 ^ 9小得多,使得它们的

A和B是介于1到10^9之间的整数, pairs是一个包含表达式((a/2)(B/2)+((a-(a/2))(B-(B/2))值的变量

#包括
使用名称空间std;
int main()
{
int T;
cin>>T;
而(T--)
{
长int A,B;
cin>>A>>B;

在许多实现中,C++中的<代码>长INT/COD>只是32位数字,最大值是2147483647。因此,如果A是10 ^ 9和B也是10 ^ 9,它们的乘积超出32位数字的最大值(实际上A和B可以比10 ^ 9小得多,使得它们的产品超过21亿5000万)。.因此产品溢出。如评论中所述

您可以将A和B的定义更改为
long int

#include<iostream>
using namespace std;
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        long long int A,B; // here
        cin>>A>>B;
        //cout<<A<<"    "<<B<<endl;
        long long int pairs = ((A/2)*(B/2)+((A-(A/2))*(B-(B/2))));
        cout<<pairs<<"\n";
    }
    return 0;
}
#包括
使用名称空间std;
int main()
{
int T;
cin>>T;
而(T--)
{
long int A,B;//这里
cin>>A>>B;
//法院
(A/2)*(B/2)
每个因子都是一个
long
,因此产品被计算为
long
。当您在末尾将其分配给
long
时,为时已晚,中间计算已经溢出。为了避免这种情况,您可以将
a、B
定义为
long
,或者在表达式中强制转换值。
#include<iostream>
using namespace std;
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        long long int A,B; // here
        cin>>A>>B;
        //cout<<A<<"    "<<B<<endl;
        long long int pairs = ((A/2)*(B/2)+((A-(A/2))*(B-(B/2))));
        cout<<pairs<<"\n";
    }
    return 0;
}