首页 > 代码库 > bzoj3767 A+B Problem加强版
bzoj3767 A+B Problem加强版
Description
Input
输入A,B
Output
输出A+B。
Sample Input
1 1
Sample Output
2
HINT
对于100%的数据,保证 |A| , |B| 不会超过10^(10^7)
呃……高精a+b和a-b的模板题
没啥技术含量的……我还以为会有什么--0之类的出现
#include<cstdio>#include<cstring>#define N 10000010int a[N],b[N],c[N],l1,l2,l3;char ch1[N],ch2[N];bool m1,m2;inline int max(int a,int b){return a>b?a:b;}int main(){ scanf("%s",ch1+1);l1=strlen(ch1+1); scanf("%s",ch2+1);l2=strlen(ch2+1); if (ch1[1]==‘-‘){l1--;m1=1;} if (ch2[1]==‘-‘){l2--;m2=1;} for (int i=1;i<=l1;i++)a[i]=ch1[l1-i+1+m1]-‘0‘; while (!a[l1]&&l1>1)l1--; if (l1==1&&!a[1])m1=0; for (int i=1;i<=l2;i++)b[i]=ch2[l2-i+1+m2]-‘0‘; while (!b[l2]&&l2>1)l2--; if (l2==1&&!b[1])m2=0; l3=max(l1,l2); if (m1^m2) { if (m1) { for (int i=1;i<=l3;i++) { int t=a[i]; a[i]=b[i]; b[i]=t; } int t=l1;l1=l2;l2=t; } bool mrk=0; if (l2>l1)mrk=1; else if (l1==l2) { for (int i=l1;i>=1;i--) if (a[i]<b[i]){mrk=1;break;} else if (a[i]>b[i])break; } if (mrk) { printf("-"); for (int i=1;i<=l3;i++) { int t=a[i]; a[i]=b[i]; b[i]=t; } int t=l1;l1=l2;l2=t; } for (int i=1;i<=l3;i++) { a[i]-=b[i]; if (a[i]<0) { a[i]+=10; int p=i+1; while (a[p]==0) { a[p]=9; p++; } a[p]--; } } while (l3>1&&!a[l3])l3--; for (int i=l3;i>=1;i--) printf("%d",a[i]); }else { if (m1&&m2)printf("-"); for (int i=1;i<=l3;i++) { c[i]+=a[i]+b[i]; if (c[i]>9) { c[i]-=10; c[i+1]++; } } if (c[l3+1])l3++; for (int i=l3;i>=1;i--) printf("%d",c[i]); }}
bzoj3767 A+B Problem加强版
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。