1 条题解
-
0
#include<iostream> #include<cstring> using namespace std; string s1,s2; string add(string s1,string s2){//加法 long long a[10010]={},b[10010]={},c[10010]={}; long long la=s1.length(),lb=s2.length(),lc=max(la,lb),x=0; string ans=""; for(int i=0;i<la;i++)a[i]=s1[la-i-1]-'0'; for(int i=0;i<lb;i++)b[i]=s2[lb-i-1]-'0'; for(int i=0;i<lc;i++){ c[i]=a[i]+b[i]+x; x=c[i]/10; c[i]=c[i]%10; } if(x)c[lc++]=1; for(int i=lc-1;i>=0;i--)ans+=(c[i]+'0'); return ans; } string sub(string s1,string s2){//减法 long long a[10010]={},b[10010]={},c[10010]={}; long long la=s1.length(),lb=s2.length(),lc=max(la,lb),x=0,f=0; string ans=""; if((s1 < s2 && s1.length() == s2.length()) || s1.length() < s2.length()){ f=1; string t=s1; s1=s2; s2=t; swap(la,lb); cout<<'-'; } for(int i=0;i<la;i++)a[i]=s1[la-i-1]-'0'; for(int i=0;i<lb;i++)b[i]=s2[lb-i-1]-'0'; for(int i=0;i<lc;i++){ c[i]=a[i]-b[i]-x; if(c[i]<0){ x=1; c[i]+=10; }else x=0; } while(c[lc-1]==0&&lc>1)lc--; for(int i=lc-1;i>=0;i--)ans+=(c[i]+'0'); return ans; } string mul(string s1,string s2){//乘法 long long a[10010]={},b[10010]={},c[20010]={}; long long la=s1.length(); long long lb=s2.length(); long long lc=la+lb; string ans=""; for(int i=0;i<la;i++) a[i]=s1[la-1-i]-'0'; for(int i=0;i<lb;i++) b[i]=s2[lb-1-i]-'0'; for(int i=0;i<la;i++){ for(int j=0;j<lb;j++){ c[i+j]+=a[i]*b[j]; c[i+j+1]+=c[i+j]/10; c[i+j]%=10; } } while(c[lc-1]==0&&lc>1){ lc--; } for(int i=lc-1;i>=0;i--) ans+=(c[i]+'0'); return ans; } string div(string s,int b){//高精除低精 int n,a[101000],c[101000],la,lc; la=s.length(),lc=0; for(int i=0;i<la;i++)a[i]=s[i]-'0'; long long x=0; string ans=""; for(int i=0;i<la;i++){ c[i]=(x*10+a[i])/b; x=(x*10+a[i])%b; } while(c[lc]==0&&lc+1<la) lc++; for(int i=lc;i<la;i++)ans+=(c[i]+'0'); return ans; } //高精除高精忒麻烦了懒得写 int main(){ freopen("mark.in","r",stdin); freopen("mark.out","w",stdout); bool n1=0,n2=0; char f; cin>>f>>s1>>s2; if(s1[0]=='-'){s1.erase(0,1);n1=1;} if(s2[0]=='-'){s2.erase(0,1);n2=1;} if(f=='*'){if(n1+n2==1)cout<<"-"; cout<<mul(s1,s2);} if(f=='+'){ if(n1==0&n2)cout<<sub(s1,s2); else {if(n1+n2==2)cout<<"-"; cout<<add(s1,s2); }} if(f=='-'){ if(n1&&n2==0){cout<<"-"<<add(s1,s2);} else if(n1&&n2)cout<<sub(s2,s1); else cout<<sub(s1,s2);} return 0; }
- 1
信息
- ID
- 498
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 120
- 已通过
- 9
- 上传者