hdu 4608 I-number

来源:互联网 发布:词语相似度计算 java 编辑:程序博客网 时间:2024/06/05 04:07

链接: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 100010int 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;}