我目前正在学习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);
}

07-24 09:46
查看更多