200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > C语言编程练习:水仙花数

C语言编程练习:水仙花数

时间:2019-10-17 17:05:25

相关推荐

C语言编程练习:水仙花数

文章目录

题目描述思路结果

题目描述

水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。例如:153 = 13+53+ 33。本题要求编写程序,计算所有N位水仙花数。

输入格式:

输入在一行中给出一个正整数N(3<=N<=7 )。

输出格式:

按递增顺序输出所有N位水仙花数,每个数字占一行。

输入样例:

3

输出样例:

153

370

371

407

思路

首先需要读入一个数,保存在n中。

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main(){int n;scanf("%d", &n);return 0;}

既然要找出对应位数中的水仙花数,就需要对范围内的数进行遍历。对于三位数,遍历范围就是100 ~ 999,对于四位数,遍历范围就是1000 ~ 9999。我们写一个循环求出循环的起始点,循环的结束点就是起始点*10-1

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main(){int n;scanf("%d", &n);//计算遍历范围的起始点int first = 1;int i = 1;while (i < n) {first *= 10;i ++;}//遍历范围就是first到first-1i = first;while (i < first * 10) {i++;}return 0;}

在遍历过程中,我们需要去分解这个数,因此使用个临时变量t去记录它。我们还需要一个变量临时sum来记录每位数n次幂的和。执行分解过程需要一个循环,在循环中每次让t%10得到最后一位数,同时让t除以10。

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main(){int n;scanf("%d", &n);int first = 1;int i = 1;while (i < n) {first *= 10;i ++;}i = first;while (i < first * 10) {int t = i; //每次需要分解这个i,所以使用临时变量int sum = 0; //记录各个位上对应数的n次幂的和do {int d = t%10; //去当前数的最后位上的数字t/=10; //除以10,去掉当前数的最后位上的数字}while(t>0);i++;}return 0;}

在执行分解的循环中,还需要一个循环去求出t%10所得值得n次幂,并将结果加到sum中。

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main(){int n;scanf("%d", &n);int first = 1;int i = 1;while (i < n) {first *= 10;i ++;}i = first;while (i < first * 10) {int t = i;int sum = 0;do {int d = t%10;t/=10;//计算一个数的n次幂int p = d;int j = 1;while (j < n) {p*=d;j++;}sum += p;}while(t>0);}return 0;}

最后进行判断,当sum与n相等时,输出这个水仙花数。

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main(){int n;scanf("%d", &n);int first = 1;int i = 1;while (i < n) {first *= 10;i ++;}i = first;while (i < first * 10) {int t = i;int sum = 0;do {int d = t%10;t/=10;int p = d;int j = 1;while (j < n) {p*=d;j++;}sum += p;}while(t>0);if (sum == i){printf("%d\n", i);}i++;}return 0;}

结果

运行,输入3,结果如下:

运行,输入4,结果如下:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。