链接:http://acm.hdu.edu.cn/showproblem.php?pid=4608
题意:寻找一个数y,y满足y>x且y的各个位上的数字之和是10的倍数,y是所有满足条件的数中最小的那个
每次对x+1,因为只保证sum是10的倍数,如果不会进位,则最多+8次就能出结果,如果要进位则最多+19次就能出结果。
因为上面分析复杂度不高,所以我直接模拟的,也看过其他人数学的解法,表示数学做鸡,看不懂啊。
#include<stdio.h>
#include<string.h>
#define MAXN 100010
int a[MAXN];
char s[MAXN];
int main()
{
int cas,i;
scanf("%d",&cas);
while(cas--)
{
scanf("%s",s);
int len=strlen(s);
int sum=0;
a[0]=0;
for(i=0;i<len;i++)
a[i+1]=s[i]-'0',sum+=a[i+1];
while(1)
{
a[len]+=1;
sum+=1;
int i=len;
while(a[i]>=10)
{
sum-=a[i];
a[i]=0;
a[i-1]+=1;
sum+=1;
i--;
}
if(sum%10==0)
{
if(a[0])
printf("%d",a[0]);
for(i=1;i<=len;i++)
printf("%d",a[i]);
printf("\n");
break;
}
}
}
return 0;
}