标程用的是高精,但其实不需要,只要先判断个位能否满足,不能的话就向前找到第一个不是9的数加1即可,还不行就变成1xxx9的形式
/* author:jxy lang:C/C++ university:China,Xidian University **If you need to reprint,please indicate the source** */ #include <stdio.h> #include <stdlib.h> #include <string.h> char x[100005]; int main() { int T; scanf("%d",&T); while(T--) { scanf("%s",x); int len=strlen(x),i,sum=0; for(i=0;i<len;i++) sum+=x[i]-'0'; sum-=x[len-1]-'0'; if(x[len-1]<':'-sum%10&&sum%10!=0) //':'=10+'0' x[len-1]=':'-sum%10; else { for(i=len-2;i>=0;i--) { if(x[i]!='9') { x[i]++; x[len-1]='9'-sum%10; break; } sum-=9; x[i]='0'; } if(i==-1)putchar('1'),x[len-1]='9'; } printf("%s\n",x); } }