其实,我最初写的不是这样子滴,对比上面的程序,看看下面这个哪里会出问题?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | string multiply(const string &l, const string &r) { size_t lenl = l.size(); size_t lenr = r.size(); string result(lenl+lenr, '\0'); for(size_t i = 0; i < lenl; ++i) for(size_t j = 0; j < lenr; ++j) { result[i + j + 1] += ctoi(l[i]) * ctoi(r[j]); } for(size_t i = lenl + lenr-1 ; i > 0; --i) { result[i - 1] += (unsigned char)result[i] / 10; result[i] = (unsigned char)result[i] % 10 + '0'; } if(result[0] == 0) result.erase(0, 1); else result[0] += '0'; return result; } |