我目前正在学习C,我们得到了一个非常简单的矩阵乘法练习,该练习对于大多数测试用例似乎都很好。但是,有一种情况是行不通的,我已经将其范围缩小到无法产生预期结果的这段代码:
#include <stdio.h>
int main(){
int a1 = 1261373;
int b1 = 1261373;
int a2 = 1669717;
int b2 = 1293027;
long mult1 = a1*b1;
long mult2 = a2*b2;
printf("mult1=%ld , mult2=%ld", mult1, mult2);
}
我得到的输出是:
mult1=1923945609 , mult2=-1379386529
而不是预期的:
mult1=1591061845129, mult2=2158989163359
显然,特别是在第二个结果中,我首先想到了溢出。但是,这么少的数字确实不应该发生,不是吗?输入绝对是一个整数(我们不能更改),输出应该是一个长整数,所以我无法更改数据类型,也不知道第二次乘法它如何得到负数或为什么第一个结果是错的。
任何帮助将不胜感激!
最佳答案
试试这个
#include <stdio.h>
int main(){
int a1 = 1261373;
int b1 = 1261373;
int a2 = 1669717;
int b2 = 1293027;
long mult1 = (long long)a1*b1; //Type cast one operand to long long
long mult2 = (long long)a2*b2;
printf("mult1=%ld , mult2=%ld", mult1, mult2);
}