原题链接:C语言训练-阶乘和数*
解题思路: (1)在1-100000里面循环找所求数:
for (int i=1; i<100000 ; i++)
(2)每个数从低位数到高位数求阶层,设sum求个位数阶层和
while (a){
int c = a%10;
int mix = 1;
for (int j=1; j<=c; j++){
mix *= j;
}
sum += mix;
a /= 10;
}(3)符合条件的数存入之前定义好的数组,然后找出数头
if (sum == i){
s[count].value = i;
while (sum>=10){
sum /= 10;
}
s[count].head = sum;
count++;
}(4)根据数头排序
for (int i=0; i<5; i++){
if (s[i].value != 0){
for (int j=0; j<5-i-1; j++){
if (s[j].value != 0){
if (s[j].head > s[j+1].head){
struct data temp = s[j];
s[j] = s[j+1];
s[j+1] = temp;
}
}
}
}
}
(5)将拍好的数组输出
for (int i=0; i<5; i++){
if (s[i].value != 0){
printf("%d ", s[i].value );
}
}注意事项:(1)因为最终的根据首数字排序, 所以动用了结构;
(2)因为楼主技术有限,结构数组没能动态增加,还敬请会的同学能评论指导一下
参考代码:
#include <stdio.h>
struct data
{
int value;
int head;
}s[5];
int main(int argc, char const *argv[])
{
int count = 0;
for (int i=1; i<100000 ; i++){
int a = i;
int sum = 0;
while (a){
int c = a%10;
int mix = 1;
for (int j=1; j<=c; j++){
mix *= j;
}
sum += mix;
a /= 10;
}
if (sum == i){
s[count].value = i;
while (sum>=10){
sum /= 10;
}
s[count].head = sum;
count++;
}
}
for (int i=0; i<5; i++){
if (s[i].value != 0){
for (int j=0; j<5-i-1; j++){
if (s[j].value != 0){
if (s[j].head > s[j+1].head){
struct data temp = s[j];
s[j] = s[j+1];
s[j+1] = temp;
}
}
}
}
}
for (int i=0; i<5; i++){
if (s[i].value != 0){
printf("%d ", s[i].value );
}
}
return 0;
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复