第一次写高精度的错误
加法
-
存储时忘了将string中的元素转化为数字
-
输出的时候忘记高位在后低位在前,没有倒序输出
-
只有单独一个数字时忘记考虑进位
错误
if (i > a.size()) t = b[i]; if (i > b.size()) t = a[i];
正确
if (i > a.size()) t += b[i]; if (i > b.size()) t += a[i];
-
忘记考虑最后两个高位相加可能产生的进位
if (t) c.push_back(1);
减法
-
写错比较函数
a. 分类不恰当
b. 没有从倒过来比较(高位在后面)
正确 if (a.size() != b.size()) return a.size() > b.size(); else{ for(int i = a.size() ;i >= 0; i--){ if (a[i] != b[i]) return a[i] > b[i]; } } return 1; 错误 if (a.size() > b.size()) return 1; else{ for(int i = 0 ;i < a.size(); i++){ if (a[i] > b[i]) return 1; else return 0; } } return 1;
-
没有考虑负号
auto c = cmp(x, y) ? sub(x, y) : sub(y, x); for (int i = c.size() - 1; i >= 0; i--) printf("%d", c[i]);