实验4-2-9 水仙花数_c语言_PTA

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

输入格式:

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

输出格式:

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

输入样例:

3

输出样例:

153
370
371
407

思路:取余求N次方,求和观察是否相等,相等就输出,不相等就判断下一个。 注意这里有个坑:用include <math.h>中的pow函数会超时,不能拿满分数。所以选择自己写了个poww函数来代替pow函数。

#include <stdio.h>
#include <math.h>

int poww(int a,int b);//函数声明

int main(int argc, char *argv[]) {
	
	int N,sum,a,b;
	scanf("%d",&N);
	int min=poww(10,N-1);
	int max=poww(10,N);
	
	for(int i=min;i<max;i++)
	{
		sum=0;
		b=i;//这个需要保存i的值后面用来做判断用,所以不直接操作i的值。
		while(b!=0)
		{
			a=b%10;
			sum=sum+poww(a,N);
			b=b/10;
		}
		
		if(sum==i)
		{
			printf("%d\n",i);
		}
	
	}
	return 0;
	
}

int poww(int a,int b){
	int sum=1;
	for(int i=0;i<b;i++)
		{
			sum=sum*a;
		}
	
	return sum;
	
}

### 回答1: 水仙花数又称为阿姆斯特朗数,是一个 n 数(n≥3),它的每个位上数字的 n 之和等于它本身。如,1^3 + 5^3 + 3^3 = 153,因此 153 就是一个水仙花数。 下面是一个求解水仙花数的 Python 代码示: ```python for num in range(100, 1000): # 将数字转换成字符串,再转换成列表 digits = list(str(num)) # 计算每个数字的立方和 sum_of_cubes = sum(int(digit) ** 3 for digit in digits) # 判断是否为水仙花数,并输出结果 if sum_of_cubes == num: print(num) ``` 代码输出结果为: ``` 153 370 371 407 ``` 以上代码中,首先使用 for 循环遍历 100 到 999 之间的每个整数,然后将每个数转换成字符串,再将字符串转换成数字列表。接着使用列表解析式计算每个数字的立方和,最后判断是否为水仙花数,如果是就输出结果。 ### 回答2: 实验4-2-9是求解水仙花数实验水仙花数,也被称为“阿姆斯特朗数”,是一个n数(n≥3),它的每个位上数字的立方和等于它本身。如,153是一个水仙花数,因为1³+5³+3³=153。 要解决实验4-2-9,我们需要编写程序来查找并打印出所有的水仙花数一个简单且有效的方法是使用循环和条件语句来遍历所有的n数,然后判断每个数是否满足水仙花数的条件。 步骤如下: 1. 输入一个正整数n,用于定要查找的水仙花数数。 2. 使用一个循环语句来生成从10^(n-1)到10^n-1之间的所有数。 3. 对于每个生成的数,使用另一个循环语句来计算每个的立方和,并将结果与原数进行比较。 4. 如果计算结果等于原数,则打印出该数,将其作为一个水仙花数。 以下是一个基本的伪代码示: ``` 输入n 上限 <- 10^n-1 下限 <- 10^(n-1) 对于每个数字i从下限到上限 将i转换为字符串str_i 数字的立方和 <- 0 对于每个字符c在str_i中 数字的立方和 <- 数字的立方和 + (c转换为整数)^3 如果数字的立方和 等于 i 打印 i ``` 通过以上步骤,程序能够查找并打印出给定数的所有水仙花数。 ### 回答3: 实验4-2-9是关于水仙花数实验水仙花数一个数,其各个位上数字的立方和等于该数本身。如,153是一个水仙花数,因为1³+5³+3³=153。 要解决这个问题,首先需要编写一个程序,可以遍历所有的三数。然后,对每个数进行计算,找出满足条件的水仙花数。 我们可以使用嵌套的循环来遍历所有的三数。外层循环控制百数的变化,中间的循环控制十数的变化,内层循环控制个数的变化。在每循环中,计算当前三数的各个位上数字的立方和,与该数进行比较,如果相等则输出该数。 以下是示代码: ```python for i in range(1, 10): for j in range(0, 10): for k in range(0, 10): num = i * 100 + j * 10 + k if i**3 + j**3 + k**3 == num: print(num) ``` 这段代码会输出所有的水仙花数。执行代码后,可以看到153、370、371、407这四个数,它们都是水仙花数。 通过这个实验,我们可以学习到如何使用循环和条件语句来解决问题。水仙花数一个经典的数学问题,通过实验的方式,我们能够更好地理解和掌握这个概念。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值