题解 CF977A 【Wrong Subtraction】

前言

这题一看是一道模拟题,适合新手练习。

解决

整数解决会稍简单一点。

首先,将n和k读入,然后k次循环 (while和for都可解决)。

然后一个判断:按照题目要求对于每一次操作,如果 n 的最后一位数字不为零,则将它减1,否则将它除以10(即删除最后一位数字)。

即可写出判断:

1
2
if (n%10) n--;
else n/=10;

然后输出n (我是在n本身上解决)。

接下来呢?还用问,上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstdio>
//头文件不多说
using namespace std;
int n,k;
//定义变量n和k
int main()
{
scanf("%d %d",&n,&k);
//读入n和k,scanf等同于cin,但是scanf比cin快一点。
while (k--)
{
//开始循环
if (n%10) n--;
else n/=10;
//判断在上面已经讲过了,这里不多说。
}
printf("%d",n);
//输出n,等同于cout,但是printf比cout快一点。
return 0;
}

然后就是字符数组的解法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char n[15];
int k;
//定义字符数组n和整数类型变量k。
int main()
{
scanf("%s",&n);
//%s 可以读入字符数组,但不能读入string类型。
scanf("%d",&k);
int len=strlen(n);
//测量长度,strlen可以测量字符数组的长度。
while (k--)
{
//开始循环
if (n[len-1]!='0') n[len-1]--;
else len--;
//类似于上面整数解法的判断,但是注意一点(n[len-1]!='0',单引号不能忘。
}
for (int i=0;i<len;i++)
printf("%c",n[i]);
//然后一个一个输出,这样可以配合上面的len--删除方式。
return 0;
}

有的人会说,如果我想读入string类型,用什么呢?

我这里告诉你,c++只能用cin读入,cout输出。

写在后面的话

我这篇题解如果有错误,那么请在评论区里留言,我将会很感谢反映的人。

-------- 本文结束 感谢阅读 --------