2 条题解
-
0
啊,我终于AC了!!!
这题没什么好解释了吧。。。
高精度模板题
#include<bits/stdc++.h> using namespace std; #define ll long long struct BIG { string s; long long x[10010]; int len; void change() { cin>>s; len=s.length(); for(int i=1;i<=len;i++)x[len-i+1]=s[i-1]-'0'; } void print() { for(int i=len;i>0;i--)cout<<x[i]; } bool operator>(const BIG &a) { if(len!=a.len)return len>a.len; for(int i=len;i>=1;i--) if(x[i]!=a.x[i]) return x[i]>a.x[i]; return false; } bool operator<(const BIG &a) { if(len!=a.len)return len<a.len; for(int i=len;i>=1;i--) if(x[i]!=a.x[i])return x[i]<a.x[i]; return false; } BIG operator+(const BIG &a) { BIG c; c.len=max(len,a.len); int u=0; for(int i=1;i<=c.len;i++) { int t=u; if(i<=a.len)t+=a.x[i]; if(i<=len)t+=x[i]; c.x[i]=t%10; u=t/10; } if(u>0)c.x[++c.len]=u; return c; } BIG operator-(const BIG &a) { BIG c; c.len=max(len,a.len); int u=0; for(int i=1;i<=c.len;i++) { int t=x[i]-u; if(i<=a.len)t-=a.x[i]; if(t<0)c.x[i]=t+10,u=1; else c.x[i]=t,u=0; } while(c.x[c.len]==0&&c.len>1)--c.len; return c; } BIG operator*(const int &a) { BIG c; c.len=len; int u=0; for(int i=1;i<=c.len;i++) { c.x[i]=x[i]*a; c.x[i]+=u; u=c.x[i]/10; c.x[i]%=10; } while(u) { c.x[++c.len]=u%10; u/=10; } return c; } BIG operator*(const BIG &a) { BIG c; c.len=a.len+len-1; int u=0; for(int i=1;i<=len;i++) { for(int j=1;j<=a.len;j++)c.x[i+j-1]+=x[i]*a.x[j]; } for(int i=1;i<=c.len;i++) { c.x[i]+=u; u=c.x[i]/10; c.x[i]%=10; } while(u) { c.x[++c.len]=u%10; u/=10; } while(c.x[c.len]==0&&c.len>1)--c.len; return c; } }; BIG a,b,c,ans; char x; signed main(int argc,char **argv) { a.change(); cin>>x; if(x=='+') { b.change(); ans=a+b; } else if(x=='-') { b.change(); ans=a-b; } else { b.change(); ans=a*b; } ans.print(); return 0; }
出题人有一个数据点错了。。已更正
114514 * 114514
13113456196
信息
- ID
- 3
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 40
- 已通过
- 13
- 上传者