HDU 4608 I-number 2013 Multi-University Training Contest 1 1009题

题目大意:输入一个数x,求一个对应的y,这个y满足以下条件,第一,y>x,第二,y 的各位数之和能被10整除,第三,求满足前两个条件的最小的y。

解题报告:一个模拟题,比赛的时候确没过,感觉这题太坑了,比赛的时候对于所有的测试数据都能得出正确的结果,但是这题的数据太坑了,要求如果输入里面带了前导0,在输出时要按照原样将前导0输出来,我一直以为要把前导0去掉,所以一直没过。然后就是这题y<=x+20,由于满足这个关系,所以只要将输入的数经过多次加1,暴力,然后逐一判断是否满足条件就可以了。

 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 }
View Code
原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3209382.html