关于大数的加减乘除和比较模板
Posted #忘乎所以#
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于大数的加减乘除和比较模板相关的知识,希望对你有一定的参考价值。
由于深受大数的压榨,不得不写几个模板自己套用,
先写简单的加减吧,
大数以字符串输入,最后返回的值也是字符串型的。
1 string bigadd(string s,string ss){ 2 string tt; 3 int slen = s.length(); 4 int sslen = ss.length(); 5 reverse(s.begin(),s.end()); 6 reverse(ss.begin(),ss.end()); 7 int index = 0; 8 for(int i=0;i<min(slen,sslen);i++){ 9 int a = s[i]-‘0‘,b = ss[i]-‘0‘; 10 int at = a+b+index; 11 if(at>9){ 12 tt+=at-10+‘0‘; 13 index = 1; 14 }else{ 15 tt+=at+‘0‘; 16 index = 0; 17 } 18 } 19 for(int i=min(slen,sslen);i<max(slen,sslen);i++){ 20 if(slen>i){ 21 int a = s[i]-‘0‘; 22 int at = a+index; 23 if(at>9){ 24 tt+=at-10+‘0‘; 25 index = 1; 26 }else{ 27 tt+=at+‘0‘; 28 index = 0; 29 } 30 }else{ 31 int b = ss[i]-‘0‘; 32 int at = b+index; 33 if(at>9){ 34 tt+=at-10+‘0‘; 35 index = 1; 36 }else{ 37 tt+=at+‘0‘; 38 index = 0; 39 } 40 } 41 } 42 if(index){ 43 tt+=‘1‘; 44 } 45 reverse(tt.begin(),tt.end()); 46 return tt; 47 }
大数减法:
同样也是先输入两个字符串型的大数,但是这里有个前提就是,s>=ss;
可以输入之前先比较一下啊,
用比较函数,如下:
1 string bigdel(string s,string ss){//s>=ss 2 string tt,st; 3 int slen = s.length(); 4 int sslen = ss.length(); 5 reverse(s.begin(),s.end()); 6 reverse(ss.begin(),ss.end()); 7 int index = 0; 8 for(int i=0;i<sslen;i++){ 9 int a = s[i]-‘0‘; 10 int b = ss[i]-‘0‘; 11 int at = a-b-index; 12 if(at<0){ 13 tt+=at+10+‘0‘; 14 index = 1; 15 }else{ 16 tt+=at+‘0‘; 17 index = 0; 18 } 19 } 20 for(int i=sslen;i<slen;i++){ 21 int b = s[i]-‘0‘; 22 int at = b - index; 23 if(at<0){ 24 tt+=at+10+‘0‘; 25 index = 1; 26 }else{ 27 tt+=at+‘0‘; 28 index = 0; 29 } 30 } 31 bool prime = true; 32 for(int i = slen-1;i>=0;i--){ 33 if(tt[i]!=‘0‘){ 34 prime = false; 35 } 36 if(!prime){ 37 st+=tt[i]; 38 } 39 } 40 if(st.length()==0) 41 st+=‘0‘; 42 return st; 43 }
比较两个字符串大小,
这里返回的是int类型的,如果s>ss 返回1,s<ss 返回0,s==ss返回2;
1 int compare(string s,string ss){ 2 int slen = s.length(); 3 int sslen = ss.length(); 4 if(slen==sslen){ 5 for(int i=0;i<slen;i++){ 6 if(s[i]==ss[i]){ 7 continue; 8 }else{ 9 return s[i]>ss[i]; 10 } 11 } 12 }else{ 13 return slen > sslen; 14 } 15 return 2; 16 }
未完待续。。。。。。。。。。。。。。
以上是关于关于大数的加减乘除和比较模板的主要内容,如果未能解决你的问题,请参考以下文章