1、http://acm.hdu.edu.cn/showproblem.php?pid=4608
2、题目大意:
给定一个数X,要求输出一个比X大的数Y,并且组成Y的数字加起来是10的倍数
3、当前的X比较大,长度是10^5,将数字X当字符串处理
4、题目:
I-number
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1642 Accepted Submission(s): 672
Problem 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.
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.
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
Source
Recommend
liuyiding
5、代码;
#include<stdio.h>
#include<string.h>
#define N 100005
char x[N];
int num[N];
int main()
{
int t,sum,ans,i;
scanf("%d",&t);
while(t--)
{
sum=0;
scanf("%s",x);
int len=strlen(x);
for(i=0;i<len;i++)
{
num[i]=x[i]-'0';
//printf("**%d\n",num[i]);
sum+=num[i];
}
ans=10-sum%10;
// printf("**%d\n",sum);
num[len-1]+=ans;
int bit=0;
if(num[len-1]>9)
{
for(i=len-2;i>=0;i--)
{
bit++;
num[i]++;
num[i]%=10;
if(num[i])
break;
}
if(i<0)
{
printf("1");
for(i=0;i<len-1;i++)
printf("0");
printf("9");
}
else
{
num[len-1]=(num[len-1]+100000-bit)%10;
for(int i=0;i<len;i++)
printf("%d",num[i]);
}
}
else
{
for(int i=0;i<len;i++)
printf("%d",num[i]);
}
printf("\n");
}
return 0;
}
/*
5
202
155
19876
12
15
*/