奇妙高精,但是不会压位
点击查看代码
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<string> #include<utility> #include<vector> #include<queue> #include<bitset> #include<map> #define FOR(i,a,b) for(register int i=a;i<=b;i++) #define ROF(i,a,b) for(register int i=a;i>=b;i--) #define mp(a,b) make_pair(a,b) #define pll pair<long long,long long> #define pii pair<int,int> #define fi first #define se second using namespace std; inline int read(); typedef long long ll; typedef double db; const int N=5005; const int INF=0x3f3f3f3f; int n,m,k; struct Int{ int a[N],len; Int(){ memset(a,0,sizeof a); len=0; } }; void print(Int x){ ROF(i,x.len,1) printf("%d",x.a[i]); } Int Turn(int x){ Int ans; while(x){ ans.a[++ans.len]=x%10; x/=10; } return ans; } Int Turn(char s[]){ Int ans; ans.len=strlen(s+1); ROF(i,ans.len,1) ans.a[i]=s[ans.len-i+1]-'0'; return ans; } Int operator +(Int x,Int y){ FOR(i,1,max(x.len,y.len)){ x.a[i]=x.a[i]+y.a[i]; x.a[i+1]+=x.a[i]/10; x.a[i]%=10; } x.len=max(x.len,y.len); while(x.a[x.len+1]) x.len++; while(x.len>1&&x.a[x.len]==0) x.len--; return x; } int Compare(Int x,Int y){ if(x.len>y.len) return 1; if(x.len<y.len) return -1; ROF(i,x.len,1){ if(x.a[i]>y.a[i]) return 1; else if(x.a[i]<y.a[i]) return -1; } return 0; } Int operator -(Int x,Int y){ Int ans; FOR(i,1,max(x.len,y.len)){ if(x.a[i]<y.a[i]){ x.a[i]+=10; x.a[i+1]--; } ans.a[i]=x.a[i]-y.a[i]; } ans.len=max(x.len,y.len); while(ans.len>1&&ans.a[ans.len]==0) ans.len--; return ans; } Int operator *(Int x,int y){ Int ans; int t=0; FOR(i,1,x.len){ t+=x.a[i]*y; ans.a[++ans.len]=t%10; t/=10; } if(t) ans.a[++ans.len]=t; while(ans.len>1&&ans.a[ans.len]==0) ans.len--; return ans; } Int operator *(Int x,Int y){ Int ans; FOR(i,1,x.len){ FOR(j,1,y.len){ ans.a[i+j-1]+=x.a[i]*y.a[j]; ans.a[i+j]+=ans.a[i+j-1]/10; ans.a[i+j-1]%=10; } } ans.len=x.len+y.len; while(ans.len>1&&ans.a[ans.len]==0) ans.len--; return ans; } Int operator /(Int x,int y){ Int ans; int t=0; ans.len=x.len+1; ROF(i,x.len,1){ t=t*10+x.a[i]; ans.a[i]=t/y; t%=y; } while(ans.len>1&&ans.a[ans.len]==0) ans.len--; return ans; } Int operator /(Int x,Int y){ Int ans,t; if(x.len<y.len){ ans.len=1; return ans; } ans.len=x.len-y.len+1; ROF(k,ans.len-1,0){ FOR(i,0,t.len+5) t.a[i]=0; t.len=y.len+k; FOR(i,1,y.len) t.a[i+k]=y.a[i]; while(Compare(x,t)!=-1){ ans.a[k+1]++; FOR(i,1,x.len){ if(x.a[i]<t.a[i]) x.a[i+1]--,x.a[i]+=10; x.a[i]-=t.a[i]; } while(x.len>1&&x.a[x.len]==0) x.len--; } } while(ans.len>1&&ans.a[ans.len]==0) ans.len--; return ans; } char aa[N],bb[N]; int main() { Int a,b; scanf("%s%s",aa+1,bb+1); a=Turn(aa); b=Turn(bb); return 0; } inline int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();} return f*x; }
$$\text{看完了不点个赞再走嘛!!!}$$
分类:
奇技淫巧
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步