【题解】 [蓝桥杯 2023 国 Python A/Java A] 整数变换

73 阅读1分钟

P10985 [蓝桥杯 2023 国 Python A/Java A] 整数变换

题目背景

Python 选手建议使用 PyPy3 提交本题。

题目描述

小蓝有一个整数 nn。每分钟,小蓝的数都会发生变化,变为上一分钟的数减去上一分钟的数的各个数位和。

例如,如果小蓝开始时的数为 2323,则下一分钟变为 23(2+3)=1823 - (2 + 3) = 18,再下一分钟变为 18(1+8)=918 - (1 + 8) = 9,再下一分钟变为 99=09 - 9 = 0,共经过了 33 分钟变为 00

给定一个正整数,请问这个数多少分钟后变为 00

输入格式

输入一行包含一个整数 nn

输出格式

输出一个整数,表示答案。

输入输出样例 #1

输入 #1

23

输出 #1

3

说明/提示

对于 30%30\% 的评测用例,1n10001 \le n \le 1000

对于 60%60\% 的评测用例,1n1061 \le n \le 10^6

对于所有评测用例,1n1091 \le n \le 10^9

题目分析

题目要求统计多少分钟后变为0。按照模拟对的思路进行处理,由于次数未知,所以可以使用while循环,判断数值不为0的时候就重复执行,内部每次减去数值的各数位和。

代码实现

#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
const int N = 1e5 + 5;
int count(int x){//统计x的各数位和
	int sum=0;
	while(x){
		sum+=x%10;
		x/=10;
	}
	return sum;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int x;
	cin>>x;
	int cnt=0;
	while(x){//循环,直到数字变为0
		x-=count(x);//减去数位和
		cnt++;//统计分钟数
	}
	cout<<cnt;
	return 0;
}