首页 > 代码库 > 真·纯手撸高精度模板
真·纯手撸高精度模板
耗时(50分钟)不压位
内容只有高精度+-*,因为其他我不会写QAQ~
均ACluogu,codevs
#include<bits/stdc++.h>using namespace std;const int N =(int)1e5+10;struct bignum { int m[N],len; char str[N]; int ok; bignum() {ok=1;len=1,memset(m,0, sizeof(m));} void in() {scanf("%s",str);len=strlen(str);for(int i=0;i<len;i++) m[i]=str[len-i-1]-‘0‘;} void out() {if(ok==-1) printf("-");for(int i=len-1;i>=0;i--) printf("%c",m[i]+‘0‘);puts("");} bool operator <(const bignum &b) const { if(len!=b.len) return len<b.len; for(int i=len-1;i>=0;i--) if(m[i]!=b.m[i]) return m[i]<b.m[i]; return 0; }};bignum operator +(bignum a,bignum b) { bignum c; c.len=max(a.len,b.len); for(int i=0;i<c.len;i++) { c.m[i]+=(a.m[i]+b.m[i]); for(;c.m[i]>=10;c.m[i]-=10,c.m[i+1]++); } c.len+=(c.m[c.len]!=0); return c;}bignum operator -(bignum a,bignum b) { bignum c; int len=max(a.len,b.len); if(a<b) swap(a,b),c.ok=-1; for(int i=0;i<len;i++) { c.m[i]+=(a.m[i]-b.m[i]); for(;c.m[i]<0;c.m[i]+=10,c.m[i+1]--); } for(int i=len;i>=0;i--) if(c.m[i]) {c.len=i+1;break;} return c;}bignum operator *(bignum a,bignum b) { bignum c; c.len=a.len+b.len-1; for(int i=0;i<a.len;i++) for(int j=0;j<b.len;j++) { c.m[i+j]+=a.m[i]*b.m[j]; for(;c.m[i+j]>=10;c.m[i+j+1]+=c.m[i+j]/10,c.m[i+j]%=10); } for(;c.m[c.len-1];c.m[c.len]+=c.m[c.len-1]/10,c.m[c.len-1]%=10,c.len++); c.len--; return c;}bignum a,b,c;main() { a.in(),b.in(); c=a+b; c.out(); c=a-b; c.out(); c=a*b; c.out(); return 0;}
真·纯手撸高精度模板
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。