大数加减法(面试准备)

    xiaoxiao2025-12-08  1

    大数加减法,使用string类型来表示数字

    //思路:

    1):对于两个正数或者是负数相加,则直接相加

    2):负数加上正数,则相当于正数减去负数

    代码如下:

    /** 大整数的加减法 */ #include <iostream> #include <string> using namespace std; int myminus=0;//0 表示没有负号,1表示有 string bignumdel(string str1,string str2); string bignumAdd(string str1,string str2) { int len1=str1.length(); int len2=str2.length(); if(len1==0) return str2; if(len2==0) return str1; if(str1[0]=='-' && str2[0]=='-') { myminus=1; str1.erase(0,1);str2.erase(0,1); return bignumAdd(str1,str2); } else if(str1[0]=='-' && str2[0]!='-') { str1.erase(0,1); return bignumdel(str2,str1); } else if(str1[0]!='-' && str2[0]=='-') { str2.erase(0,1); return bignumdel(str1,str2); } //add int maxlen=len1; string result; if(len1>len2) { maxlen=len1; for(int i=0;i<(len1-len2);i++) { str2='0'+str2; } } else if(len2>len1) { maxlen=len2; for(int i=0;i<(len2-len1);i++) { str1='0'+str1; } } int takeover=0; for(int i=maxlen-1;i>=0;i--) { int tmp=(str1[i]-'0')+(str2[i]-'0')+takeover; takeover=0; if(tmp>=10) { tmp=tmp%10; takeover=1; } char ch=('0'+tmp); result= ch +result; } if(takeover==1) result='1'+result; return result; } string bignumdel(string str1,string str2) { int len1=str1.length(); int len2=str2.length(); if(len1>len2) { for(int i=0;i<len1-len2;i++) str2='0'+str2; } else if(len2>len1) { for(int i=0;i<len2-len1;i++) str1='0'+str1; myminus=1; return bignumdel(str2,str1); } else if(len1==len2) { if(str1<str2) { myminus=1; return bignumdel(str2,str1); } } //del int takeover=0; string result; for(int i=len1-1;i>=0;i--) { int tmp=(str1[i]-'0')-(str2[i]-'0')-takeover; if(tmp<0) { tmp=(str1[i]-'0')-(str2[i]-'0')+10-takeover; takeover=1; } char ch='0'+tmp; result= ch +result; } return result; } int main() { string str1,str2; while(cin>>str1>>str2) { string res=bignumAdd(str1,str2); if(myminus==1) printf("-"); int len=res.length(); int i=0; while((i++)<len)//除0前缀 { if(res[0]=='0') { res.erase(0,1); } else break; } cout<<res<<endl; myminus=0; } return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-1304716.html
    最新回复(0)