Description
The I-number of x is defined to be an integer y,which satisfied the the conditions below:
1. y>x;
2. the sum of each digit of y(under base 10) is the multiple of 10;
3. among all integers that satisfy the two conditions above,y shouble be the minimum.
Given x,you’re required to calculate the I-number of x.
Input
An integer T(T≤100) will exist in the first line of input,indicating the number of test cases.
The following T lines describe all the queries,each with a positive integer x. The length of x will not exceed 10 5.
Output
Output the I-number of x for each query.
Sample Input
1
202
Sample Output
208
#include <cstdio> #include <cstring> using namespace std; char s[100009]; int res[100009],len; void add() { res[len-1]++; int i=len-1; while(res[i]>9) { res[i--]=0; res[i]++; } } int sum() { int ans=0; for(int i=0; i<len; i++) ans+=res[i]; return ans%10; } int main() { int t; scanf("%d",&t); while(t--) { memset(res,0,sizeof res); scanf("%s",&s[1]); s[0]='0'; len=strlen(s); //printf("--------%s\n",s); for(int i=0; i<len; i++) { res[i]=s[i]-'0'; } do { add(); } while(sum()!=0); int flag=0; for(int i=0; i<len; i++) { if(res[i]!=0) flag=1; if(flag) printf("%d",res[i]); } printf("\n"); } return 0; }
Reflect: 1,首先大数加法; 2,刚开始想着可能一步一步加会超时,然后仔细想想,其实根本就不会加多少步,并不会超时; 3,顶多会加到多一位,所以也不会像铺的大数加法一样 ,需要倒置; 4,由于要找比他大的数,所以用do_while;