解题思路: (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语言代码)浏览:555 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:597 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:578 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:1222 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:549 |
wu-理财计划 (C++代码)浏览:831 |
WU-整除问题 (C++代码)浏览:611 |
WU-printf基础练习2 (C++代码)浏览:2001 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:560 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:610 |