标签:
大数乘法:void _mult(string num1, string num2, string &result ) 参数1和2均为两个大数,结果保存于第3个字符串中
1 void _mult(string num1, string num2, string &result ) 2 { 3 reverse(num1.begin(),num1.end()); //反转 4 reverse(num2.begin(),num2.end()); 5 result=""; 6 int i, j, re_int[150]; //********这里的150是位数,根据需要可以增大或减小********* 7 memset(re_int, 0, sizeof(re_int)); 8 for(i=0; i<num1.length(); i++) //两串作乘法,结果存放于re_int数组中, 最多可达150位! 9 for(j=0; j<num2.length(); j++) 10 re_int[i+j] += ((num1[i]-48) * (num2[j]-48)); 11 int jinwei=0, zhi; 12 for(i=0; i<num1.length()+num2.length(); i++) //单独处理进位问题,上一步中的数组每个元素都有可能超过10的,所以没处理进位 13 { 14 zhi = re_int[i]+jinwei; 15 re_int[i] = zhi%10; 16 jinwei = zhi/10; 17 } 18 for(i=num1.length()+num2.length()-1; i>=0; i--) //将i打个标记,数组re_int的前面部分可能全0,要去掉 19 if(re_int[i]!=0) break; 20 for(;i>=0;i--) //将整型数组转成字符串 21 result = result+(char)(re_int[i]+48); 22 if(result=="") //若结果还是空,乘法的结果是0? 23 result="0"; 24 }
大数加法: void _plus(string num1,string num2,string &result) 参数1和2均为两个大数,结果保存于第3个字符串中
1 void _plus(string num1,string num2,string &result) 2 { 3 result=""; 4 reverse(num1.begin(),num1.end()); 5 reverse(num2.begin(),num2.end()); 6 int i; 7 for(i=0;i<int(num1.length())&&i<int(num2.length());i++) 8 { 9 char c=(char)(num1[i]+num2[i]-48); 10 result=result+c; 11 } 12 while(i<int(num1.length())) 13 { 14 result=result+num1[i]; 15 i++; 16 } 17 while(i<int(num2.length())) 18 { 19 result=result+num2[i]; 20 i++; 21 } 22 int jinwei=0; 23 for(i=0;i<int(result.length());i++) 24 { 25 int zhi=result[i]-48+jinwei; 26 result[i]=(char)(zhi%10+48); 27 jinwei=zhi/10; 28 } 29 if(jinwei!=0) 30 result = result+(char)(jinwei+48); 31 for(i=result.length()-1;i>=0;i--) 32 if(result[i]!=‘0‘) break; 33 result = result.substr(0,i+1); 34 reverse(result.begin(), result.end()); 35 if(result.length()==0) 36 result="0"; 37 }
标签:
原文地址:http://www.cnblogs.com/xcw0754/p/4418352.html