C语言求三位水仙花数
- 格式:docx
- 大小:83.82 KB
- 文档页数:1
main () { inti,a,b,c; for(i=100;i<1000;i++) { a=i%10; b=(i/10)%10; c=i/1">
C语言程序设计习题(编程题 C语言程序设计习题(编程题习题1(编程题)[知识点:基础知识编制程序,要求输入整数a和b,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。
习题1-参考答案 main() printf("Input a & b:"); if(a*a+b*b>100) printf("%d\n",(a*a+b*b)/100); elseprintf("%d\n",a+b); } 习题2(编程题)[知识点:基础知识试编程判断输入的正整数是否既是5又是7的整数倍,若是输出yes,否则输出no。
习题2-参考答案 main() printf("Input a:"); if(a%5==0&&a%7==0) printf("yes\n"); else printf("no\n"); } 习题3(编程题)[知识点:选择结构输入一个整数,判断它能否被3,5,7整除,并输出以下信息之一: (1)能同时被3,5,7整除 (2)能被其中两数整除(要指出哪两个)。
(3)能被其中一个数整除(要指出哪一个)。
(4)不能被任何一个整除。
习题3-参考答案 main()printf("Input a number:"); if(m%3==0&&m%5==0&&m%7==0)printf("能同时被3,5,7整除 elseif((m%3==0&&m%5==0)||(m%3==0&&m%7==0)||(m%5==0&&m%7==0)) {printf("能被其中两数整除 if(m%3==0&&m%5==0) printf("(3,5)"); else if(m%3==0&&m%7==0) printf("(3,7)");else printf("(5,7)"); else if(m%3==0||m%5==0||m%7==0) {printf("能被其中一个数整除 C语言程序设计习题(编程题if(m%3==0) printf("(3)"); else if(m%5==0) printf("(5)"); else printf("不能被任何一个整除"); } 习题4(编程题)[知识点:选择结构将以下程序段改用非嵌套的if语句实现。
c语言水仙花数的解题思路一、水仙花数的定义和特点水仙花数,又称阿姆斯特朗数,是指一个n位数,其每个位上的数字的n 次幂之和等于它本身。
例如,153是一个水仙花数,因为153 = 1^3 + 5^3 + 3^3。
水仙花数具有以下特点:1.每一位数字都不重复;2.通常情况下,水仙花数的位数较多;3.目前已知的水仙花数都是正整数。
二、C语言解题思路要找到一个n位数是否为水仙花数,可以通过遍历每一位数字,计算其n 次幂之和,然后与原数进行比较。
若相等,则为水仙花数;否则,不是。
由于位数较多,可以采用递归或循环方法进行计算。
三、算法实现步骤1.输入一个整数n,表示要查找的水仙花数的位数;2.输入一个整数m,表示要判断的数;3.初始化一个结果变量res为0;4.遍历m的每一位数字,从右到左,分别计算其n次幂之和:1) 提取当前位数字;2) 计算该位数字的n次幂;3) 将计算结果累加到res上;5.判断res与m是否相等,若相等,则输出m是水仙花数,否则输出不是。
四、代码示例与解析以下是一个简单的C语言实现:```c#include <stdio.h>int is_narcissistic_number(int m, int n) { int res = 0;while (m) {int digit = m % 10;res += pow(digit, n);m /= 10;}return res == m;}int main() {int n, m;printf("请输入位数n:");scanf("%d", &n);printf("请输入要判断的数m:");scanf("%d", &m);if (is_narcissistic_number(m, n)) {printf("%d是水仙花数。
", m);} else {printf("%d不是水仙花数。
c语言枚举法例题及解题思路一、引言枚举法是一种常用的编程方法,通过列举所有可能的选项,逐一进行判断或计算,从而解决特定的问题。
在C语言中,枚举法尤其适用于需要处理大量数据或进行有限次试验的情况。
本文档将通过几个例题来展示如何使用枚举法进行解题,并提供详细的解题思路。
二、例题及解题思路1. 例题1:求水仙花数水仙花数是指一个n位数(n≥3),其各个位上的数字的n次幂之和等于它本身。
例如,153是一个3位数,且各个位上的数字的3次幂之和等于153(1^3 + 5^3 + 3^3 = 153),因此153是一个水仙花数。
解题思路:* 枚举所有可能的n位数;* 逐一判断该数的各个位上的数字的n次幂之和是否等于该数;* 如果是,则该数为水仙花数,输出该数。
代码实现:```c#include <stdio.h>int main() {int n, num, originalNum = 0;for (n = 3; n >= 0; n--) { // 从3位数开始枚举num = 0;for (int i = 0; i < n; i++) { // 逐位判断num = num * 10 + (rand() % 10); // 生成随机数}num = num * n; // 计算n次幂之和if (num == originalNum) { // 判断是否相等printf("%d是水仙花数\n", num);} else { // 如果不相等,继续下一轮枚举continue;}}return 0;}```2. 例题2:求斐波那契数列前n项和斐波那契数列是一个经典的数学序列,前两项为0和1,之后的每一项都是前两项之和。
例如,斐波那契数列的前几项为:0、1、1、2、3、5、8、13、21...求斐波那契数列前n项的和。
解题思路:* 使用枚举法逐一判断前n项中的每一项;* 根据斐波那契数列的定义,计算每一项的值;* 将所有项的值相加得到总和。
n位数水仙花数C语言程序水仙花数是指一个n位数,它的各位数字的n次方之和等于它本身。
例如,153是一个3位数水仙花数,因为1^3 + 5^3 + 3^3 = 153。
本篇文章将介绍如何使用C语言编写一个程序来找出n位数水仙花数。
我们将逐步解释程序的实现步骤,并提供完整的源代码。
程序设计思路要找出n位数水仙花数,我们需要遍历所有可能的n位数,并检查每个数是否满足水仙花数的条件。
为了实现这个目标,我们可以按照以下步骤来设计我们的程序:1.接收用户输入的位数n。
2.使用循环生成所有可能的n位数。
3.对于每个生成的n位数,计算其各位数字的n次方之和。
4.如果计算结果等于原始数值,则将该数值打印出来。
下面是我们具体实现的C语言程序:#include <stdio.h>#include <math.h>int main() {int n, num, digit, sum, temp;printf("请输入位数n:");scanf("%d", &n);printf("%d位数的水仙花数有:\n", n);for (num = pow(10, n-1); num < pow(10, n); num++) {temp = num;sum = 0;while (temp != 0) {digit = temp % 10;sum += pow(digit, n);temp /= 10;}if (sum == num) {printf("%d\n", num);}}return 0;}程序解析让我们逐行解析上述代码,以便更好地理解程序的实现细节。
1.首先,我们包含了两个头文件:stdio.h和math.h。
stdio.h包含了输入输出函数,math.h包含了数学函数,其中包括pow()函数,用于计算幂。
c语言判断水仙花数函数题水仙花数是指一个n位数,它的每个位上的数字的n次幂之和等于它本身。
例如,153是一个3位数,且1^3 + 5^3 + 3^3 = 153,所以153是一个水仙花数。
下面是一个C语言函数,用于判断一个整数是否为水仙花数:#include <stdio.h>#include <math.h>int is_narcissistic_number(int num) {int temp = num;int n = 0;while (temp != 0) {temp /= 10;n++;}temp = num;int sum = 0;while (temp != 0) {int digit = temp % 10;sum += pow(digit, n);temp /= 10;}return sum == num;}int main() {int num;printf("请输入一个整数: ");scanf("%d", &num);if (is_narcissistic_number(num)) {printf("%d 是水仙花数", num);} else {printf("%d 不是水仙花数", num);}return 0;}这个函数首先计算输入整数的位数(n),然后计算每个位上的数字的n次幂之和,最后判断这个和是否等于输入整数。
如果相等,则返回1,表示输入整数是水仙花数;否则返回0,表示输入整数不是水仙花数。
1、。
C语言基础题第一期:1. 输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身,例如:153是一水仙花数,因为153=1+125+27.2. 一个数如果恰好等于它的因子之和,这个数就称为“完数”,例如:6的因子是1,2,3,而6=1+2+3因此6是“完数”。
编程序找出1000之内的所有完数,并按下面格式输出其因子:6 its factors are 1,2,33. 有一个分数序列2/1,3/2,5/3,8/5,13/8,21/13,…求出这个数列的前20相之和。
4.一个球从100M高度自由下落,每次落地后反跳回原高度的一半,再落下,再反弹,求它在第10次落地时,共经过多少米,第10次反弹多高。
5.猴子吃桃问题。
猴子第一天,摘下若干个桃子,当即吃了一半,还不过瘾,有多吃了一个。
第二天早上又将剩下的桃子吃掉一半,有多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第十天早上想再吃时,就只剩一个桃子了。
求第一天共摘了多少个桃。
6.两个乒乓球队进行比赛,各出3人。
甲队为A,B,C;乙队X,Y,Z。
以抽签决定比赛名单。
有人向队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,请编程找出3队赛手的名单。
7.将一个二维数组行和列的元素互换,存到另一个数组中。
原始二位数组手动输入,行和列自定。
8.输出以下的杨辉三角形(要求输出15行)11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 19.输出“魔方阵”。
所谓魔方阵就是指这样的方阵,它的每一行,每一列和对角线之和均相等。
例如三阶魔方阵为:8 1 64 9 2要求输出1~n2的自然数构成的魔方阵。
10.找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。
也可能没有鞍点。
第二期:1.有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。
水仙花数水仙花什么是水仙花数春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:水仙花数是指一个 n 位数( n≥3 ),它的每个位上的数字的n 次幂之和等于它本身。
(例如:1^3 + 5^3 + 3^3 = 153)常见水仙花数三位的水仙花数共有4个:153,370,371,407;四位的水仙花数共有3个:1634,8208,9474;五位的水仙花数共有3个:54748,92727,93084;六位的水仙花数只有1个:548834;七位的水仙花数共有4个:1741725,4210818,9800817,9926315;八位的水仙花数共有3个:24678050,24678051,88593477…………使用高精度计算,可以得到超过INT类型上限的水仙花数:5: 930845: 927275: 547486: 5488347: 98008177: 42108187: 17417257: 99263158: 246780508: 246780518: 885934779: 1465112089: 9129851539: 4723359759: 53449483610: 467930777411: 3216404965011: 4002839422511: 4267829060311: 4938855060611: 3216404965111: 9420459191411: 4470863567911: 8269391657814: 2811644033596716: 433828176939137016: 433828176939137117: 3587569906225003517: 2189714258761207519: 328958298444318703219: 492927388592808882619: 449812879116462486920: 6310542598859969391621: 44917739914603869730721: 12846864304373139125223: 2790786500997705256781423: 3545259010403169193594323: 2787969489305407447140523: 2188769684112291628885824: 17408800593806529302372224: 188451485447897896036875(为环保起见,24位以上的水仙花数略)理论上,最大的水仙花数不超过34位。
n位数水仙花数c语言程序水仙花数,又称阿姆斯特朗数,是一个三位数,其每个数字的立方和等于该数本身。
例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。
今天我们将学习如何编写一个C语言程序来找到n位数的水仙花数。
首先,让我们了解一下C语言程序设计的基本思路。
我们需要使用C语言编写一个循环,用于检查每个三位数是否是水仙花数。
我们可以使用变量来存储每个数字的立方和,然后与该数本身进行比较。
接下来,我们将详细编写这个程序。
以下是一个简单的C语言程序,用于找到n位数的水仙花数:```c#include <stdio.h>int main() {int n, i, num, sum = 0;printf("请输入一个正整数n:");scanf("%d", &n);for (i = 100; i < 1000 * n; i++) {sum = 0;while (i) {sum += i % 10 * i % 10 * i % 10;i /= 10;}if (sum == i) {printf("%d位水仙花数:%d", n, i);}}return 0;}```这个程序首先导入<stdio.h>头文件,用于输入输出。
在main()函数中,我们使用printf()和scanf()函数分别提示用户输入一个正整数n,并读取用户输入的值。
接下来,我们使用一个for循环来遍历所有三位数(从100到999),并检查它们是否是水仙花数。
在循环内部,我们使用另一个for循环来迭代每个三位数的每一位数字。
我们使用取模运算符%()来获取当前位上的数字,然后将其立方加入变量sum中。
当循环结束时,我们检查sum是否等于该数本身。
如果相等,说明这是一个水仙花数,我们将其输出。
这个程序可以找到n位数的水仙花数,但请注意,由于三位数的水仙花数较少,所以程序可能需要较长时间才能找到所有的水仙花数。
c语言for循环题目经典题下面是搜集的关于C语言for循环的经典例题。
一、求水仙花数问题水仙花数:水仙花数是一个三位数,特点是各个位数的立方和等于该数本身。
//水仙花数是一个三位数,特点是各个位数的立方和等于该数本身。
//例:153=1*1*1+5*5*5+3*3*3#include <stdio.h>int main(){int i,a,b,c;for(i=100;i<=999;i++) //保证范围为三位数{a = i%10; //取变量的个位数b = i/10%10; //取变量的十位数c = i/100; //取变量的百位数if ((a*a*a+b*b*b+c*c*c) == i) printf("%d\n",i);}return 0;}二、求规定范围内的完数问题完数:一个正整数的所有真因子(除了自身以外的约数)的和恰好等于它本身//完数定义:一个正整数的所有真因子(除了自身以外的约数)的和恰好等于它本身//例:6为完数,6的真因子为1,2,3 6=1+2+3#include <stdio.h>int main(){int n,i,j,sum;printf("请输入计算完数终止数:\n");scanf("%d",&n);for (i=1;i<=n;i++){sum=0; //一定要保证每次sum的值都要进行刷新(在循环体内)for (j=1;j<i;j++) //保证小于i,不可等于(完数定义){if (i%j==0) sum+=j;}if (sum==i) printf("%d\n",i);}return 0;}三、求规定范围内质数问题质数:一个大于1的整数只能被1和自己整除//质数:一个大于1的整数只能被1和自己整除#include <stdio.h>int main(){int i,j,k,n;printf("请输入终止范围:");scanf("%d",&n);for (i=2;i<=n;i++){k=1; //借助k的值对是否为质数进行判断,需保证每次k都能刷新for (j=2;j<i;j++) //最小质数是2{if (i%j==0){k=0; //在这期间只要有一个其他数可对该数进行整除,就代表该数不是质数break;}}if (k==1) printf("%d\n",i);}}四、计算阶乘之和正整数的阶乘:是所有小于及等于该数的正整数的积,并且0的阶乘为1。
C语言程序设计典型编程必背1.计算机1-3+5-7+。
-99+101的值#include<stdio.h>main ( ){int i,t=1,s;s=0;for(i=1;i<=101;i+=2){ t=t*i; s=s+t;t=t>0?-1:1; }printf(“%d\n”,s);}2.输入一个十进制数,将他对应的二进制数的各位反序,形成新的十进制数输出。
11—1011—1101—13#include<stdio.h>main ( ){int n,x,t;printf(“shuruzhengshu:”);scanf(“%d”,&n);x=0;while(n!=0){ t=n%2; x=x*2+t;n=n/2; }printf(“xindezhengshu:%d\n,x”);}3.给出年月日,计算出该日是该年的第几天。
#include<stdio.h>main ( ){int year,month,day,days,i,d;printf(“shuru nian,yue,ri:”);scanf(“%d,%d,%d”,&year,&month,&day);days=0;for(i=1;i<month;i++){switch(i){case 1:case 3:case 5:case 7:case 8:case 10:case 12:d=31;break;case 4:case 6:case 9:case 11:d=30;break;case 2:if(year%4==0&&year%100!=0||year%400==0) d=29;else d=28;}days+=d;}printf(“%d nian %d yue %d ri shigainiande %d tian。
\n”,year,month,day,days+day);}4.求100——200间的素数。
C语言程序设计上机报告课题名称:水仙花数的算法院(系):工程学院专业班级: 052126学生姓名:**学号:***********指导教师:***2013年11月24日C语言上机报告之水仙花数一、上机目的:1.了解c语言和程序设计2.学习怎样实现算法,怎样实现水仙花数的输出二、上机作业:判断是否是水仙花数。
—水仙花数是指一个n位数(n>=3),它的每个位上数字n次幂之和等于它本身。
要求:—用scanf输入的数字为任意位数字—要求进行错误检查—判断该数是否为水仙花数—对判断结果进行输出三、程序设计1、NS流程图:2、算法:首先将0赋值给sum,1赋值给i,0赋值给c,n赋值给h,h赋值给j,再输入任意一位数n,对它取10的商,用该商与1比较。
若不小于1,则将该商赋值给n,i+1赋值给i,再进行判断,重复以上步骤,直到n/10不小于1,跳出循环体,记住此时i的值,执行下一步。
判断c是否小于i。
若是,则将h 取10的余数赋值给b,h除以10的商赋值给h,sum+b的i次幂赋值给sum,c+1赋值给c,再进行判断,重复以上步骤,直到c不小于i,跳出循环体,执行下一步。
最后判断sum=i,若是,则输出n“是水仙花数”;若不是,则输出n“不是水仙花数”。
3、程序代码:# include<stdio.h> //预处理指令# include<math.h> //定义一个函数int main() //函数首部{int n,b,h,j;//定义变量sum=0;//对变量sum赋值c=0;//对变量c赋值i=1; //对变量i赋值printf("please enter a number,n=?"); //输出语句scanf("%d",&n); //输入任意数n h=n; //对变量h赋值while(n/10>=1) //循环结构的开始{n=n/10; //对变量n赋值i=i+1; //对变量i赋值} //第一层循环结束j=h; //对变量j赋值while(c<i) //第二层循环的开始{b=h%10; //对变量b赋值h=h/10; //对变量h赋值sum=sum+(int)pow(b,i); //对变量sum赋值c=c+1; //对变量c赋值} //第二层循环结束if(sum==j) //判断语句开始printf("是水仙花数\n"); //判断正确,输出n“是水仙花数”Else //否则,表转折printf("不是水仙花数\n"); //输出n“不是水仙花数”return 0;} //程序结束4、程序分析:(1)、用scanf函数输入时,后面应该是变量地址,如“&n”。
1输入三个整数x,y,z,把这三个数由小到大输出。
# include <stdio.h>void main(){int x,y,z,a;scanf ("%d,%d,%d",&x,&y,&z);if(x>y) {a=x; x=y;y=a;}if(x>z) { a=x; x=z; z=a;}if(y>z) {a=y; y=z; z=a;}printf("%d,%d,%d\n",x,y,z);}2输入圆的半径,输出圆的周长和面积。
# include<stdio.h># define PI 3.1415926# define S ==PI*r*r# define V (4.0/3)*PI*r*r*rvoid main(){double r;printf("please input r:");scanf("%lf",&r);printf("area is %.4lf\n",S);printf("volume is %.4lf\n",V);}输入正方形的边长,输出正方形的周长和面积。
# include<stdio.h>void main(){float c,zc,mj;printf("输入你的正方形");scanf("%f\n",&c);zc=4*c;mj=c*c;printf("周长%f,面积%f,边长%f",zc,mj,c);}3用格式输入函数输入3个字符,并用输出函数反向输出3个字符和他们的ASCII 码。
# include<stdio.h>int main(){char-ch1,ch2,ch3;printf("please input three characters:\n");scanf("%C%C%c",&ch1,&ch2,&ch3);printf("%c\n%d\n",ch3,ch3);printf("%c\n%d\n",ch2,ch2);printf("%c\n%d\n",ch1,ch1);}输入一个摄氏温度,要求输出华氏温度。
n位数水仙花数c语言程序标题:探索C语言中的[n位数水仙花数]程序设计在计算机编程中,我们经常会遇到各种有趣的数字问题,其中之一就是“水仙花数”。
水仙花数是一个三位数,它的每个位上的数字的立方和等于该数本身。
例如,153就是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。
然而,这个问题可以进一步扩展到n位数的情况。
本文将通过C语言程序设计,逐步解析如何找出n位数的水仙花数。
首先,我们需要理解什么是n位数。
在十进制数系统中,一个n位数是指一个包含n个数字的数,其中第一个数字(最高位)不能为零。
例如,对于三位数,它可以在100到999之间变化;对于四位数,它可以在1000到9999之间变化。
接下来,我们开始编写C语言程序来找出n位数的水仙花数。
以下是一个基本的步骤指南:1. 定义变量和常量:首先,我们需要定义一些变量和常量来存储和处理数据。
这可能包括一个整数变量来存储输入的n值,一个字符数组来存储n 位数的每一位,以及一个整数变量来存储n位数的立方和。
2. 用户输入:然后,我们需要从用户那里获取n的值。
这可以通过使用scanf函数实现。
3. 生成n位数:接着,我们需要生成所有可能的n位数。
这可以通过使用循环结构实现。
我们可以从10^(n-1)开始,一直递增到10^n-1。
这是因为一个n位数的最小值是10^(n-1),最大值是10^n-1。
4. 计算立方和:对于每一个生成的n位数,我们需要计算其每一位的立方和。
这可以通过再次使用循环结构实现。
我们可以将n位数转换为字符数组,然后依次取出每一位,将其转换为整数,计算立方,然后累加到总和中。
5. 判断是否为水仙花数:如果一个n位数的立方和等于该数本身,那么它就是一个水仙花数。
我们可以使用if语句来判断这一点。
6. 输出结果:最后,我们将找到的所有水仙花数输出给用户。
这可以通过使用printf函数实现。
以下是一个简单的C语言程序示例,用于找出三位数的水仙花数:c#include <stdio.h>int main() {int num, sum = 0, temp;printf("Enter a number: ");scanf("d", &num);将数字转换为字符串char str[100];sprintf(str, "d", num);计算立方和for(int i = 0; str[i] != '\0'; i++) {temp = str[i] - '0';sum += temp * temp * temp;}判断是否为水仙花数if(sum == num)printf("d is a Narcissistic number.\n", num);elseprintf("d is not a Narcissistic number.\n", num);return 0;}这个程序可以很容易地扩展到n位数的情况,只需要修改生成n位数和计算立方和的部分即可。
c语言水仙花数的概念-回复C语言水仙花数的概念导语:数学中有许多有趣的现象和规律,其中之一就是水仙花数。
水仙花数是指一个n位正整数(n≥3),它的每个位上的数字的n次幂之和等于它本身。
1. 水仙花数的定义水仙花数,又称为阿姆斯特朗数,是指一个n位正整数(n≥3),它的每个位上的数字的n次幂之和等于它本身。
例如,153就是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。
水仙花数的概念最早可以追溯到20世纪初的一位名叫D. R. Kaprekar的数学家提出。
2. 水仙花数的特性根据水仙花数的定义,我们可以发现它有一些特性。
首先,水仙花数一定是一个正整数。
其次,水仙花数的位数n大于等于3,即至少有三位数字。
最后,水仙花数的每一位数字的n次幂之和等于它本身。
这些特性是判断一个数是否为水仙花数的基础。
3. 水仙花数的解法要找到水仙花数,我们需要遍历所有的n位数字,然后判断每个数字是否符合水仙花数的定义。
在C语言中,我们可以使用循环结构和条件语句来实现这个过程。
首先,我们可以使用两个嵌套的for循环生成所有可能的n位数字。
外层循环控制千位数字的取值范围,内层循环控制百位和十位数字的取值范围。
例如,如果我们要找的是3位数字,那么我们可以使用如下的代码:int i, j, k;for (i = 1; i <= 9; i++) {for (j = 0; j <= 9; j++) {for (k = 0; k <= 9; k++) {判断是否为水仙花数}}}在内层循环中,我们可以使用条件语句来判断每个数字是否符合水仙花数的定义。
我们可以用一个临时变量temp来保存每一位数字的n次幂之和,然后与当前数字比较。
如果相等,则说明该数是水仙花数。
int temp = pow(i, 3) + pow(j, 3) + pow(k, 3);if (temp == 100 * i + 10 * j + k) {打印水仙花数}4. 优化水仙花数的解法上述的解法虽然能够找到所有的水仙花数,但在计算时可能会浪费一些时间。
水仙花c语言程序题水仙花数是指一个n 位数( n≥3 ),它的每个位上的数字的n 次幂之和等于它本身。
比如说,153 就是一个水仙花数:1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153现在我们要写一个C 语言程序,输入一个正整数n (n>=1),输出所有n 位的水仙花数。
要实现这个功能,我们可以先定义两个变量i 和j,分别从0 和1 开始循环。
然后在循环中,我们可以拼接i 和j 生成一个n 位数,再判断这个数是否是水仙花数,如果是,就输出它。
下面是具体的程序代码:#include <stdio.h>#include <math.h>int main(){int n, i, j, num, sum;printf("请输入n值:");scanf("%d", &n);printf("%d 位的水仙花数有:\n", n);for (i = 0; i < 10; i++) {for (j = 0; j < 10; j++) {num = i * pow(10, n-1) + j * pow(10, n-2);sum = pow(i, n) + pow(j, n);if (num == sum) {printf("%d\n", num);}}}return 0;}首先,程序要求用户输入n 的值,并输出哪些数字是n 位的水仙花数。
然后,在循环中,我们把i 和j 拼接成一个n 位数,并计算这个数的n 次幂和。
如果这个数等于它的n 次幂和,就说明它是一个水仙花数。
于是,我们就将它输出。
请注意,要将pow 函数从math.h 中引入到程序中,才能使用。
在本例中,我们使用了pow(i, n) 和pow(j, n) 来计算i 和j 的n 次幂。
pow 函数的第一个参数是底数,第二个参数是幂次。