码迷,mamicode.com
首页 > 其他好文 > 详细

常见函数库(收集于网络)

时间:2015-04-11 20:46:57      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

 

大数乘法: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 }
multiply

 

大数加法: 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 }
plus

 

常见函数库(收集于网络)

标签:

原文地址:http://www.cnblogs.com/xcw0754/p/4418352.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!