Идея состоит в том, чтобы перегрузить operator *
, чтобы он мог умножить две строки, представляющие десятичное значение числа. Оператор является частью большего класса, но это не важно. Алгоритм такой же, как в начальной школе:)
Вот мой код:
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
и работают нормально.