分享

大数相加减以及相乘模板

 昵称54301888 2018-10-10
复制代码
//无论开多大的数都可以,用的很爽; string sum(string s1,string s2) { if(s1.length()<s2.length()) { string temp=s1; s1=s2; s2=temp; } int i,j; for(i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--) { s1[i]=char(s1[i] (j>=0?s2[j]-'0':0)); if(s1[i]-'0'>=10) { s1[i]=char((s1[i]-'0')%10 '0'); if(i) s1[i-1] ; else s1='1' s1; } } return s1; } string sub(string str1,string str2)//高精度减法 { string str; int tmp=str1.length()-str2.length(); int cf=0; for(int i=str2.length()-1;i>=0;i--) { if(str1[tmp i]<str2[i] cf) { str=char(str1[tmp i]-str2[i]-cf '0' 10) str; cf=1; } else { str=char(str1[tmp i]-str2[i]-cf '0') str; cf=0; } } for(int i=tmp-1;i>=0;i--) { if(str1[i]-cf>='0') { str=char(str1[i]-cf) str; cf=0; } else { str=char(str1[i]-cf 10) str; cf=1; } } str.erase(0,str.find_first_not_of('0'));//去除结果中多余的前导0 return str; }
复制代码

相乘

复制代码
string mul(string str1,string str2) { string str(str1.size() str2.size() 5,'0'); reverse(str1.begin(),str1.end()); //翻转字符串str1 reverse(str2.begin(),str2.end()); //翻转字符串str2 int num=0,h=0; for(int i=0;i<str1.size();i ) //o(n^2)的方法模拟str1*str2(平时用的笔算乘法) { h=i; for(int j=0;j<str2.size();j ) { num =str[h]-'0' (str1[i]-'0')*(str2[j]-'0'); str[h ]=num%10 '0'; num/=10; } while(num) { str[h ]=num%10 '0'; num/=10; } } for(int i=str1.size() str2.size() 4;i>=0;i--) //去前导0 { if(str[i]=='0') str.erase(i); else break; } reverse(str.begin(),str.end());//翻转结果的字符串str return str; }
复制代码

 

  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多