高精度模版(大数相加 相乘 相除)

来源:互联网 发布:工业机器人编程待遇 编辑:程序博客网 时间:2024/05/10 18:19
#include<iostream>#include<cstring>#include<algorithm>#include<vector>using namespace std;string operator + (string s1,string s2)//大数相加{    if(s1.size()<s2.size())    {        string temp=s1;        s1=s2;        s2=temp;    }    for(int i=(int)s1.size()-1,j=(int)s2.size()-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 operator - (string s1,string s2){    if(s1.size()<s2.size()||(s1.size()==s2.size()&&s1[0]<s2[0]))    {        string temp=s1;        s1=s2;        s2=temp;    }    for(int i=(int)s1.size()-1,j=(int)s2.size()-1;i>=0;i--,j--)    {        s1[i]=char(s1[i]-(j>=0?s2[j]-'0':0));        if(s1[i]-'0'<0)        {            if(i) s1[i]=char(s1[i]-'0'+10+'0');            if(i) s1[i-1]--;            else s1='-'+s1;        }    }    return s1;}string operator * (string s,int x)//大数乘一个整数{    reverse(s.begin(),s.end());    int cmp=0;    for(int i=0;i<s.size();i++)    {        cmp=(s[i]-'0')*x+cmp;        s[i]=(cmp%10+'0');        cmp/=10;    }    while(cmp)    {        s+=(cmp%10+'0');        cmp/=10;    }    reverse(s.begin(),s.end());    return s;}string operator / (string s,int x)//大数除一个整数{    int cmp=0;    bool ok=false;    string ans="";    for(int i=0;i<s.size();i++)    {        cmp=cmp*10+(s[i]-'0');        if(cmp>=x)        {            ok=true;            ans+=(cmp/x+'0');            cmp=cmp%x;        }        else{            if(ok)                ans+='0';        }    }    return ans;}string operator * (string x,string y)//大数乘大数{    string ans;    for(int i=(int)y.size()-1,j=0;i>=0;i--,j++)    {        string tmp=x*(y[i]-'0');        for(int k=0;k<j;k++)            tmp+='0';        ans=ans+tmp;    }    return ans;}

0 0
原创粉丝点击