本文共 2581 字,大约阅读时间需要 8 分钟。
string bigAdd(const string a,const string b) { int lena = a.size(); int lenb = b.size(); int lensum = lena > lenb ? lena+1 : lenb+1; vectorres; res.resize(lensum); for(int i = 0,j = 0; i < lena && j < lenb; ++i,++j){ res[i] = a[lena-i-1]-'0' + b[lenb-i-1]-'0'; } if(lena > lenb){ for(int i = lenb; i < lena; ++i){ res[i] = a[lena-i-1]-'0'; } } else if(lenb > lena){ for(int i = lena; i < lenb; ++i){ res[i] = b[lenb-i-1]-'0'; } } for(int i = 0; i < lensum-1; ++i){ if(res[i] > 9){ int t = res[i]/10; res[i] = res[i]%10; res[i+1] += t; } } string r = ""; if(res[lensum-1]){//考虑最高位进位情况 r += res[lensum-1]+'0';//还原为字符类型加入到结果 } for(int i = lensum-2; i >= 0; --i){//这里是lensum-2 r += res[i]+'0';//都要转换为字符处理 } return r; }
string bigSub(const string a,const string b) { int lena = a.size(); int lenb = b.size(); int max_len = lena > lenb ? lena : lenb; vectorres; res.resize(max_len); int flag = 1; if(lena < lenb || (lena == lenb && a < b)){ flag = 0; } if(flag) cout <<"a >= b"< = b时候 for(int i = 0; i < lenb; ++i){ res[i] = a[lena-i-1]-b[lenb-i-1]; } for(int i = lenb; i < lena; ++i){ res[i] = a[lena-i-1]-'0'; } } else{ for(int i = 0; i < lena; ++i){ res[i] = b[lenb-i-1]-a[lena-i-1]; } for(int i = lena; i < lenb; ++i){ res[i] = b[lenb-i-1]-'0'; } } for(int i = 0; i < max_len; ++i){ if(res[i] < 0){ res[i] += 10; res[i+1] -= 1; } } string r = ""; if(!flag) r += "-"; int k; for(k = max_len-1; k >= 0; --k){ //过滤掉前缀 0 if(res[k] != 0) break; } if(k == -1){ return r += '0'; } for(; k >= 0; --k){ r += res[k]+'0'; } return r; }
void bigMul(string a,string b) { int lena = a.size(); int lenb = b.size(); int max_len = lena+lenb+1; vector res; res.resize(max_len); reverse(a.begin(),a.end());//把a,b反转 reverse(b.begin(),b.end()); for(int i = 0; i < lena; ++i){ for(int j = 0; j < lenb; ++j){ res[i+j] += (a[i]-'0') * (b[j]-'0');//这里需要把字符 转换为 数字 } } for(int i = 0; i < max_len; ++i){//统一处理进位问题 if(res[i] > 9){ res[i+1] += res[i]/10; res[i] %= 10; } } int k; for(k = max_len-1; k >= 0; --k){//过滤多余的0 if(res[k] != 0) break; } if(k == -1){//防止结果为0 的情况呗过滤掉了 cout << 0; return ; } for(; k >= 0; --k){//结果输出 cout << res[k]; } return ; }
转载地址:http://ehimi.baihongyu.com/