原题链接:C语言训练-阶乘和数*
解题思路:
系统不严谨,说的是按字典序排列的,但是提交从小到大依然正确,我在这里写写按字典序的,其他的前面的大佬们已经解释到位了,我这里使用了一个冒泡排序,使用strcmp函数的特性(按字典序比较大小),来给数组排序;
strcmp(s1,s2):(字典序)
s1 > s2 返回 1
s1 = s2 返回0
s1 < s2 返回-1
注意事项:
参考代码:
#include <stdio.h>
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <functional>
using namespace std;
char s[10][100];
long long fact(int n)
{
int ans = 1;
for(int i = n; i >= 2; --i)
{
ans *= i;
}
return ans;
}
long long f(int n)
{
long long sum = 0;
while(n)
{
sum += fact(n%10);
n /= 10;
}
return sum;
}
int main()
{
int j = 0;
for(int i = 1; i <= 100000; ++i)
{
if(i == f(i))
{
sprintf(s[j], "%d ", i);
j++;
}
}
for(int i = 0; i < j-1; ++i)
{
for(int k = 0; k < j-1-i; ++k)
{
if(strcmp(s[k], s[k+1]) > 0)
{
char tmp[10];
strcpy(tmp,s[k]);
strcpy(s[k],s[k+1]);
strcpy(s[k+1],tmp);
}
}
}
for(int i = 0; i < j; ++i)
{
printf("%s ", s[i]);
}
return 0;
}0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复