C. Long Beautiful Integer

题目思路还是很直接,首先按要求生成字符串。如果该目标字符串小于原字符串,那么从第k位开始,找到最后一个非9的位置,++,同时如果有9,要考虑进位(一开始没有考虑WA了一次)。

犯了一个错误,就是比较字符串大小时,一开始写的是如果b中有一个小于a,就return false.WA了半天。可以直接用strcmp()。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=2e5+5;
 4 int n,k;
 5 char a[N],b[N];
 6 bool check()
 7 {
 8     for(int i=1;i<=n;i++)
 9     {
10         if(a[i]<b[i])
11             return true;
12         if(a[i]>b[i])
13             return false;
14     }
15     return true;
16 }
17 int main()
18 {
19     while(scanf("%d%d",&n,&k)!=EOF)
20     {
21         scanf("%s",a+1);
22         for(int i=1;i<=n;i++)                                    
23         {
24             if(i<=k)
25                 b[i]=a[i];
26             else
27                 b[i]=b[i-k];
28         }
29         int p;
30         if(!check())//strcmp(b+1,a+1)<0
31         {
32             p=k;
33             while(b[p]=='9'&&p>1)//忘记考虑9不能再加1的情况
34             {
35                 b[p]='0';
36                 p--;
37             }
38             b[p]++;
39             for(int i=k+1;i<=n;i++)
40                 b[i]=b[i-k];
41         }
42         printf("%d\n",n);
43         for(int i=1;i<=n;i++)
44             printf("%c",b[i]);
45         printf("\n");
46     }
47     return 0;
48 }
View Code

猜你喜欢

转载自www.cnblogs.com/1024-xzx/p/12109483.html
今日推荐