怎么做网站能够增加人气,帮别人推广赚钱,购物网站主页设计图,广州网站给定两个正整数 N1N2。把从 N1 到 N2 的每个数的各位数的立方相乘#xff0c;再将结果的各位数求和#xff0c;得到一批新的数字#xff0c;再对这批新的数字重复上述操作#xff0c;直到所有数字都是 1 位数为止。这时哪个数字最多#xff0c;哪个就是“数字…给定两个正整数 N1N2。把从 N1 到 N2 的每个数的各位数的立方相乘再将结果的各位数求和得到一批新的数字再对这批新的数字重复上述操作直到所有数字都是 1 位数为止。这时哪个数字最多哪个就是“数字之王”。
例如 N11 和 N210 时第一轮操作后得到 { 1, 8, 9, 10, 8, 9, 10, 8, 18, 0 }第二轮操作后得到 { 1, 8, 18, 0, 8, 18, 0, 8, 8, 0 }第三轮操作后得到 { 1, 8, 8, 0, 8, 8, 0, 8, 8, 0 }。所以数字之王就是 8。
本题就请你对任意给定的 N1N2 求出对应的数字之王。
输入格式
输入在第一行中给出两个正整数 0N1N2≤10^3其间以空格分隔。
输出格式
首先在一行中输出数字之王的出现次数随后第二行输出数字之王。例如对输入 1 10 就应该在两行中先后输出 6 和 8。如果有并列的数字之王则按递增序输出。数字间以 1 个空格分隔行首尾不得有多余空格。
输入样例
10 14输出样例
2
0 8解题思路
模拟过程即可但本题测试点有一点坑尤其要注意输入是两个个位数的情况处理不对会有两个测试点过不了 比如当n1为1 n2为5时候则直接输出 1 1 2 3 4 5 代码示例
#include bits/stdc.husing namespace std;int main() {int n1, n2;cin n1 n2;vectorint nums;for (int i n1; i n2; i) {nums.emplace_back(i);}//先判断n1到n2的数字序列是否都为个位数的情况这种情况可以直接输出//比如n1为1 n2为5则直接输出//1//1 2 3 4 5if (n1 9 n2 9) {cout 1 endl;for (int i 0; i nums.size(); i) {if (i ! 0) {cout ;}cout nums[i];}return 0; //程序结束 不再执行后续语句}//再处理n1到n2的数字序列不都为个位数的情况vectorint nums2; //用于存得到的每一批新的数字while (true) {for (int i 0; i nums.size(); i) {string temp1 to_string(nums[i]); //将nums中的每个数转化为字符串//将nums中的每个数的各位数的立方相乘int fact 1;for (int j 0; j temp1.length(); j) {fact * (temp1[j] - 0) * (temp1[j] - 0) * (temp1[j] - 0);}//再将fact的各位数求和string temp2 to_string(fact); //将fact转化为字符串int sum 0;for (int k 0; k temp2.length(); k) {sum temp2[k] - 0;}nums2.emplace_back(sum); //存入处理后的数字}//判断nums2中的数是否都为个位数bool flag true;for (int j 0; j nums2.size(); j) {if (nums2[j] 9) { //大于9就代表至少两位数了flag false;}}if (flag false) { //代表nums2中的数不都为个位数 需要再次处理nums nums2;nums2.clear(); //清除掉nums2中的所有数}else {break; //只有当nums2中的数字都为个位数的情况下才会停止while循环}}//最后找出数字之王//multiset容器中允许有重复的数字 且存进去的数字会自动升序排序multisetint res;for (int i 0; i nums2.size(); i) {res.insert(nums2[i]);}int max_val 0; //找出最大出现次数for (auto p res.begin(); p ! res.end(); p) {if (max_val res.count(*p)) { //res.count(*p)用于查找*p的出现次数max_val res.count(*p);}}//set容器会将存进去的数字去重处理不会有重复的数字 且存进去的数字会自动升序排序setint ans;for (auto p res.begin(); p ! res.end(); p) {if (res.count(*p) max_val) {ans.insert(*p); //将出现次数最多的数字(数字之王)都存入ans中}}//由于ans中的数字之王已经自动升序排序 那么直接按格式输出即可cout max_val endl;for (auto p ans.begin(); p ! ans.end(); p) {if (p ! ans.begin()) {cout ;}cout *p;}return 0;
}
运行结果