考慮低於該函數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 –