看到题目的时候脑子还是比较懵,查阅了各路大神的解题思路,在此写下自己一些的思考过程:
题目是这样的:
大佬给出的解答:
#include <stdio.h>
#include <inttypes.h>
int signed_high_prod(int x, int y) {
int64_t mul = (int64_t) x * y;
return mul >> 32;
}
unsigned unsigned_high_prod(unsigned x, unsigned y) {
int sig_x = x >> 31;
int sig_y = y >> 31;
int signed_prod = signed_high_prod(x, y);
return signed_prod + x * sig_y + y * sig_x;
}
unsigned test(unsigned x, unsigned y) {
uint64_t mul = (uint64_t) x * y;
return mul >> 32;
}
int main(){
printf("%d\n",test(114514,1919810)==unsigned_high_prod(114514,1919810));
}
思路
这里面的我的理解为左移w位,用除法表达一下。
欢迎指出错误和大声交流!
参考: