【发布时间】:2014-03-05 20:58:02
【问题描述】:
我创建了一个小型控制台应用程序,它乘以 2 个长整数。 我不知道我的问题在哪里。这个应用程序可以正常工作,直到位数为 3。
但如果位数大于 3 ,则应用程序的输出是错误的。 :(
请告诉我我的问题是在哪里解决的。
这是我的代码:
int digits (int n)
{
int counter = 0;
while (n > 0)
{
n/=10;
counter++;
}
return counter;
}
long longMultiply(long a, long b)
{
const int S = 3;
int w,x,y,z;
int n = max(digits(a),digits(b));
if(a == 0 || b ==0) {
return 0;
} else if (n <= S) {
return a*b;
} else {
int m = (n/2);
//first number
x = a/(10^m);
y = a%(10^m);
//second number
w = b/(10^m);
z = b%(10^m);
return (longMultiply(x,w)*(10^(2*m)) + (longMultiply(x,z) + longMultiply(w,y)))*(10^m) + longMultiply(y,z) ;
}
}
int main() {
//digits(12345);
cout << longMultiply(100,100);
return 0;
}
【问题讨论】:
-
任何错误结果的例子?
-
如果位数更大 tahn 3 是的,我得到了错误的答案。例如,当 longMultiply(999,999) 我得到正确的答案时。但是当值是 longMultiply(1000*1000) 我得到错误的答案。