hdu4608
2013-07-25 16:12
267 查看
#include<iostream> #include<string> #include<cstring> using namespace std; void add(char a[],char b[],char back[]) { int i,j,k,up,x,y,z,l; char *c; if (strlen(a)>strlen(b)) l=strlen(a)+2; else l=strlen(b)+2; c=(char *) malloc(l*sizeof(char)); i=strlen(a)-1; j=strlen(b)-1; k=0;up=0; while(i>=0||j>=0) { if(i<0) x='0'; else x=a[i]; if(j<0) y='0'; else y=b[j]; z=x-'0'+y-'0'; if(up) z+=1; if(z>9) {up=1;z%=10;} else up=0; c[k++]=z+'0'; i--;j--; } if(up) c[k++]='1'; i=0; c[k]='\0'; for(k-=1;k>=0;k--) back[i++]=c[k]; back[i]='\0'; } int res(char s[]) { int len=strlen(s),d=0,i; for(i=0;i<len;i++) { d+=s[i]-'0'; d%=10; } return d; } int main() { int T,i,j; cin>>T; while(T--) {char s[200086]={'\0'},s1[200086]={'\0'},s2[200086]={'\0'},s3[200086]={'\0'}; cin>>s; int len=strlen(s); int d=res(s); if(d==0) { s1[0]=10-(s[len-1]-'0')+'0'; add(s,s1,s2); d=res(s2); if(d==0){ cout<<s2<<endl;continue; } s1[0]=10-d+'0'; add(s2,s1,s3); cout<<s3<<endl; continue; } else { if(d>s[len-1]-'0') { s1[0]=10-d+'0'; add(s,s1,s2); cout<<s2<<endl; continue; } else{ s1[0]=10-(s[len-1]-'0')+'0'; add(s,s1,s2); d=res(s2); if(d==0){ cout<<s2<<endl;continue; } s1[0]=10-d+'0'; add(s2,s1,s3); cout<<s3<<endl; continue; } } s1[0]=d+'0'; add(s,s1,s2); cout<<s2<<endl; } return 0; }
相关文章推荐
- 强烈的求知欲望
- 买楼10大误解
- 杭电OJ题1018 Big Number 解题报告
- 大数模板-加乘除-String类实现
- 3989. I guess the gift is a calculator! toj
- 大数模版
- hdu 4608——I-number
- hdu4229Vive la Difference!
- hdu2946Letter Cookies
- NYOJ 光棍的yy 斐波那契 大数
- NYOJ 676 小明的求助 二分幂
- NYOJ 513 hdu 1753 大数A+B
- NYOJ 155 POJ 1001 求高精度幂
- NYOJ 144 某种序列 java
- hdu 4523 威威猫系列故事——过生日
- hdu 4523 威威猫系列故事——过生日
- nyoj 181 小明的难题
- NYOJ 676 小明的求助
- 省赛选拔之愚人节专题
- hdu 2537(水)