Moh*_*uli 1 c++ algorithm math
我创建了一个小的控制台应用程序,乘以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;
}
Run Code Online (Sandbox Code Playgroud)
10 ^ m不是10的m次幂,实际上这是m的10 xor
您可以使用powcmath库中的函数(http://www.cplusplus.com/reference/cmath/pow/),但它适用于浮点数.
或者获得10 ^ m,你可以简单地将1 m乘以10.
int m = (n/2);
long tenToM = 1;
for (int i=0; i<m; i++)
tenToM *= 10;
long tenToTwoM = tenToM * tenToM;
Run Code Online (Sandbox Code Playgroud)
而不是10^m使用tenToM而不是10^(2*m)使用tenToTwoM