L1-103 整数的持续性 - 团体程序设计天梯赛-练习集 (pintia.cn)
考察对一个数的反复求各位乘积,对基本功要求不低
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int calculatePersistence(int number)
{
int persistence = 0;
while (number >= 10) //如果num不是个位数就一直循环
{
int product = 1;
while (number > 0)
{
product *= (number % 10); //令Product为num各个位数的乘积
number /= 10; //退位(消去各个位数的数字)
}
number = product; //更新此时的各个位数的乘积为新的number
persistence++; //每次得到新的product 步数+1(连续性++)
}
return persistence;
}
int main() {
int a, b;
cin >> a >> b;
int maxPersistence = 0; //最大连续性
vector<int> longestNumbers; //连续性最长的整数的数组
for (int i = a; i <= b; ++i)
{
int persistence = calculatePersistence(i);
if (persistence > maxPersistence)
{
maxPersistence = persistence; //更新最大连续性
longestNumbers.clear(); // 清除之前加到数组的数字,因为此时有更大的连续性了
longestNumbers.push_back(i); //加入这个当前最大连续性的数字
}
else if (persistence == maxPersistence) //如果当前的数字也是最大连续性 则直接加入数组
{
longestNumbers.push_back(i);
}
}
cout << maxPersistence << endl;
for (int i = 0; i < longestNumbers.size(); ++i) //直接输出不用排序(按递增顺序输出)的原因是数据是从小到大一个个数的
{
if (i > 0) cout << " "; //保证了末尾没有空格
cout << longestNumbers[i];
}
cout << endl;
return 0;
}