需要注意的都在代码注释里,自己看吧,欢迎讨论。另外,此代码调试通过
#include<iostream> #include<string> #include<cmath> using namespace std; //模拟手工加法 string add(string str1, string str2) { int i; string str; int len_str1 = str1.length(); int len_str2 = str2.length(); int n = abs(len_str1-len_str2); //长度对齐 if(len_str1 < len_str2) for(i=0; i<n; i++) str1 = "0"+ str1; else for(i=0; i<n; i++) str2 = "0"+ str2; len_str1 = str1.length(); //此时两个字符串的长度一样 int cf=0; //进位标志位 int temp; //存放两个数相加的和 for(i=len_str1-1; i>=0; i--) { temp = str1[i]-'0' + str2[i]-'0' + cf; //把字符串转化为整型 cf = temp/10; temp = temp%10; str = char(temp+'0') + str; } if(cf!=0) str = char(cf+'0') + str; return str; } //模拟手工乘法 string mul(string str1, string str2) { string str, tempstr; int len_str1=str1.length(); int len_str2=str2.length(); for(int i=len_str2-1;i>=0;i--) { int temp=str2[i]-'0'; int t=0; //存放乘积的个位数 int cf=0; //乘积的进位标志位 if(temp!=0) { for(int j=1;j<=len_str2-1-i;j++) //str2每一位数字的权值 tempstr+="0"; for(int j=len_str1-1;j>=0;j--) { t=(temp*(str1[j]-'0')+cf)%10; cf=(temp*(str1[j]-'0')+cf)/10; tempstr=char(t+'0')+tempstr; //字符串拼接,相当于在结果后加几个0 } if(cf!=0) tempstr=char(cf+'0')+tempstr; } str=add(str,tempstr); } str.erase(0,str.find_first_not_of('0')); //删除结果中多余的前导0 if(str.empty()) str="0"; return str; } int main() { string str1, str2; cin >> str1; cin >> str2; cout << mul(str1, str2) << endl; return 0; }
原文地址:http://blog.csdn.net/xumesang/article/details/44493771