考虑低于该函数A * B的结果转换在几个数字i和j,其中:你会如何计算j在这个函数中?
- 的a,b,x,y是INT(假设他们总是=> 32位长的)
- a和b是< = n * m,其中n = 10^3和m = 10^5。 n * m = BASE。
- A * B可以为我* BASE + J
你将如何计算Ĵ,而无需使用比INT更大的任何类型(如果小心与诠释的这是UB溢出)被写成:
#include <iostream>
#include <cstdlib>
using namespace std;
int n = 1000, m = 100000;
struct N {
int i, j;
};
N f(int a, int b) {
N x;
int a0, a1, b0, b1, o;
a1 = a/n;
a0 = a - (a1 * n); // a0 = a % n
b1 = b/m;
b0 = b - (b1 * m); // b0 = b % m
o = a1 * b1 + (a0 * b1)/n + (b0 * a1)/m;
x.i = o;
x.j = 0; // CALCULATE J WITH INTs MATH
return x;
}
int main(int, char* argv[]) {
int a = atoi(argv[1]),
b = atoi(argv[2]);
N x = f(a, b);
cout << a << " * " << b << " = " << x.i << "*" << n*m
<< " + " << x.j << endl;
cout << "which is: " << (long long)a * b << endl;
return 0;
}
这功课吗?没关系,如果是 - 只是让我们知道。 :) –
@taryn,看起来更像是一个采访问题 –
大声笑,编辑狂热:-D –