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;