这个想法是重载 anoperator *
以便它可以将表示数字的十进制值的两个字符串相乘。运算符是更大类的一部分,但这并不重要。算法和小学一样:)
这是我的代码:
Bignumber operator* (Bignumber x, Bignumber y ){
int i, j, transfer=0, tmp, s1, s2, k;
char add[1];
string sol;
string a, b;
Bignumber v1, v2;
a=x.GetValue();
b=y.GetValue();
a.insert(0,"0");
b.insert(0,"0");
for(i=a.length()-1; i>=0; i--){
s1 = (int) a[i]-48;
for(k=a.length()-i-1; k >0 ; k--){
sol+="0";
}
for(j=b.length()-1; j >=0; j--){
s2=(int) b[j]-48;
tmp=s1*s2+transfer;
if(tmp >= 10){
transfer=tmp/10;
tmp=tmp-(10*transfer);
}
itoa(tmp, add, 10);
sol.insert(0, add);
}
v1=sol;
v2=v1+v2;
sol.erase(0);
transfer=0;
}
return v2;
}
这在大多数情况下都可以正常工作,但对于某些随机值,它不能正常工作。例如对于 128*28 它返回 4854 而不是 3584。
知道可能是什么问题吗?
operator
s+
并且=
已经为该类重载Bignumber
并且它们工作正常。