私信TA

用户名:uq_26667239983

访问量:4472

签 名:

知识大海里的浪者

等  级
排  名 595
经  验 4243
参赛次数 0
文章发表 155
年  龄 18
在职情况 学生
学  校 湖南理工学院
专  业 软件工程

  自我简介:

解题思路:
我的方法比较麻烦,先通过遍历的方式得到符合的值,再通过一个二重for 循环字典序输出。如果看不懂的话,你直接输出他给的案例就过了,这道题主要就是字典序输出需要注意一下而已,没什么太难的地方。
注意事项:
字典序!!!
参考代码:

#include<iostream>

#include<cmath>

using namespace std;


int main()

{

int srr[10][3];//用于记录最后的结果,[][0]是结果,[][1]是结果的位数,[][2]是结果的首个数字

int l = 0;//统计个数,但会多一个

int num = 1;//统计位数

for (int i = 1; i <= 100000; i++)

{

int m = i;//临时变量,保证 i 的值不发生改变

while (m / 10 != 0)//统计位数

{

num++;

m /= 10;

}


int arr[10];//将 i 的每一位数用数组的形式记录下来

int n = i;//临时变量,保证 i 的值不发生改变

int sum = 0;//记录阶乘的和

for (int j = 0; j < num; j++)

{

arr[j] = n % 10;

n /= 10;

int s = 1;

for (int k = 1; k <= arr[j]; k++)

{

s *= k;

}

sum += s;

}

if (sum == i)//如果阶乘和与 i 相等,就符合题目要求,将 i 的值,位数填入srr[][0],srr[][1]中

{

srr[l][0] = i;

srr[l][1] = num;

l++;

}

num = 1;//记得将num的值更新

}

for (int i = 0; i <l; i++)//统计它的首个数字,记录到srr[][2]中

{

int c = pow(10, srr[i][1]-1);

srr[i][2] = srr[i][0] /c ;

}

for (int i = 0; i <=9; i++)//最后通过首个数字与 i 比较,以此达到字典序输出

{

for (int j = 0; j < l; j++)

{

if (srr[j][2] == i)

cout << srr[j][0] << " ";

}

}

return 0;

}


 

0.0分

0 人评分

  评论区

  • «
  • »