【结论】【高精度】

来源:互联网 发布:光盘数据循环冗余错误 编辑:程序博客网 时间:2024/05/16 01:58

高精度:加(正加正)

#include<cstdio>#include<iostream>using namespace std;const int need=1000000;int aa[need],bb[need];string add_(string a,string b){    int lena=a.length(),lenb=b.length();    int len=max(lena,lenb),len2=min(lena,lenb);    for(int i=len2;i<=len+1;i++) aa[i]=bb[i]=0;    for(int i=1;i<=lena;i++) aa[i]=a[lena-i]-'0';    for(int i=1;i<=lenb;i++) bb[i]=b[lenb-i]-'0';    for(int i=1;i<=len;i++)    {        aa[i]+=bb[i];        aa[i+1]+=aa[i]/10;        aa[i]%=10;    }    if(aa[len+1]) len++;    string ans="";    for(int i=len;i>=1;i--) ans+=aa[i]+'0';    return ans;} int main(){    string a,b;cin>>a;cin>>b;    cout<<add_(a,b);} 

高精度:减(正减正,结果可能为负)

#include<cstdio>#include<iostream>using namespace std;const int need=100000;int aa[need],bb[need];string minus_(string a,string b){    if(a==b) return "0";    int lena=a.length(),lenb=b.length();    int len=max(lena,lenb),len2=min(lena,lenb);     bool mark=false;    if(lenb>lena||lenb==lena&&b>a)    {        swap(a,b);        swap(lena,lenb);        mark=true;    }    for(int i=len2;i<=len+1;i++) aa[i]=bb[i]=0;    for(int i=1;i<=lena;i++) aa[i]=a[lena-i]-'0';    for(int i=1;i<=lenb;i++) bb[i]=b[lenb-i]-'0';    for(int i=1;i<=len;i++)     {        aa[i]-=bb[i];        if(aa[i]<0)        {            aa[i+1]--;            aa[i]+=10;         }     }     while(len&&aa[len]==0) len--;    string ans=mark?"-":"";    for(int i=len;i>=1;i--) ans+=aa[i]+'0';    return ans;}int main(){    string a,b;cin>>a>>b;    cout<<minus_(a,b);}

大整数模取幂

#include<cstdio>#include<iostream>using namespace std;#define ll long long int mod_(string a,int d){    int len=a.length(),ans=0;    for(int i=0;i<len;i++)     ans=((ll)ans*10+a[i]-'0')%d;    return ans; }int main(){    string a;cin>>a;    int d;cin>>d;    printf("%d",mod_(a,d));}
0 0
原创粉丝点击