题目大意:输入一个数x,求一个对应的y,这个y满足以下条件,第一,y>x,第二,y 的各位数之和能被10整除,第三,求满足前两个条件的最小的y。
解题报告:一个模拟题,比赛的时候确没过,感觉这题太坑了,比赛的时候对于所有的测试数据都能得出正确的结果,但是这题的数据太坑了,要求如果输入里面带了前导0,在输出时要按照原样将前导0输出来,我一直以为要把前导0去掉,所以一直没过。然后就是这题y<=x+20,由于满足这个关系,所以只要将输入的数经过多次加1,暴力,然后逐一判断是否满足条件就可以了。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #include<cstring> 3 const int MAX = 100000+5; 4 5 char str[MAX]; 6 int T,IN[MAX],sum,len; 7 int oper() { 8 len = strlen(str); 9 for(int i = 0;i<len;++i) { 10 IN[len-1-i] = str[i]-'0'; 11 sum+=IN[len-1-i]; 12 } 13 return sum; 14 } 15 void jinwei() { 16 int i = 0; 17 bool flag = 0; 18 while(IN[i]>9) { 19 IN[i+1]++; 20 IN[i]%=10; 21 sum-=9; 22 flag = 1; 23 i++; 24 } 25 sum++; 26 } 27 int main() { 28 scanf("%d",&T); 29 while(T--) { 30 scanf("%s",str); 31 sum = 0; 32 memset(IN,0,sizeof(IN)); 33 sum = oper(); 34 IN[0]++; 35 jinwei(); 36 while(sum%10!=0) { 37 IN[0]++; 38 jinwei(); 39 } 40 if(IN[len] != 0) 41 len++; 42 for(int i = len-1;i>=0;--i) 43 printf("%d",IN[i]); 44 str[0] = NULL; 45 printf(" "); 46 } 47 return 0; 48 }