C语言求21位水仙花数
c语言水仙花数的概念 -回复
c语言水仙花数的概念-回复C语言:水仙花数的概念引言:在计算机编程领域中,有一个有趣且常见的数学问题被广泛讨论和研究。
它被称为水仙花数(Narcissistic number),也被称为自恋数或阿姆斯特朗数。
本文将着重介绍水仙花数的概念,并通过逐步解释来阐释它的定义和属性。
第一部分:水仙花数的定义水仙花数是指一个n位的整数,其各个位数上的数字的n次方和等于该数本身。
更形式化地讲,对于一个n位整数:d1d2...dn,如果满足以下等式,那么这个数就是一个水仙花数:d1^n + d2^n + ... + dn^n = d1d2...dn举个例子,我们来看一个最简单的水仙花数:153 = 1^3 + 5^3 + 3^3第二部分:水仙花数的特性水仙花数具有一些有趣而令人惊叹的特性,我们逐一进行介绍。
1. 三位水仙花数:三位数的水仙花数是最简单但也是最为常见的。
在这个范围内,只有四个数是水仙花数:153、370、371和407。
这四个数各自满足对应的等式。
2. 水仙花数的个数:对于n位数来说,水仙花数的个数取决于n的值。
比如,对于4位数来说,水仙花数的个数是0,因为没有一个4位数同时满足等式。
而在5位数的情况下,也不存在水仙花数。
然而,从6位数开始,会再次出现水仙花数。
3. 最大水仙花数:目前已知的最大水仙花数是9位数的水仙花数。
它被称为“影子水仙花数”(Shadow Narcissistic number)或者“相位水仙花数”(Phase Narcissistic number)。
这个数为941430^9。
4. 水仙花数与自然数的关系:我们可以发现,水仙花数实际上是自然数的一个子集。
因此,水仙花数的数量比自然数要少得多。
第三部分:搜索水仙花数的算法为了找到水仙花数,我们需要编写一个算法。
以下是一个简单但有效的算法,可以用来搜索水仙花数:1. 确定水仙花数的位数n。
2. 循环遍历从10^(n-1)到10^n-1之间的所有数。
C语言期末考试题库
本题要求编写程序,计算2个正整数的和、差、积、商并输出。
题目保证输入和输出全部在整型范围内。
输入格式:输入在一行中给出2个正整数A和B。
输出格式:在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。
输入样例:3 2输出样例:3 + 2 = 53 - 2 = 13 * 2 = 63 / 2 = 12.程序每次读入一个正3位数,然后输出按位逆序的数字。
注意:当输入的数字含有结尾的0时,输出不应带有前导的0。
比如输入700,输出应该是7。
输入格式:每个测试是一个3位的正整数。
输出格式:输出按位逆序的数。
输入样例:123输出样例:3213.模拟交通警察的雷达测速仪。
输入汽车速度,如果速度超出60 mph,则显示“Speeding”,否则显示“OK”。
输入格式:输入在一行中给出1个不超过500的非负整数,即雷达测到的车速。
输出格式:在一行中输出测速仪显示结果,格式为:“Speed: V - S”,其中V是车速,S或者是Speeding、或者是OK。
输入样例1:40输出样例1:Speed: 40 - OK输入样例2:75输出样例2:Speed: 75 - Speeding中国有句俗语叫“三天打鱼两天晒网”。
假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?输入格式:输入在一行中给出1个不超过1000的正整数N。
输出格式:在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。
输入样例1:103输出样例1:Fishing in day 103输入样例2:34输出样例2:Drying in day 345.三个球A、B、C,大小形状相同且其中有一个球与其他球重量不同。
要求找出这个不一样的球。
输入格式:输入在一行中给出3个正整数,顺序对应球A、B、C的重量。
输出格式:在一行中输出唯一的那个不一样的球。
c语言水仙花数统计(函数)
c语言水仙花数统计(函数)1.引言1.1 概述概述部分:水仙花数是指一个三位数,其各个位上数字的立方和等于该数本身的数。
例如,153是一个水仙花数,因为1的立方加上5的立方加上3的立方等于153。
在这篇长文中,我们将讨论如何在C语言中判断一个数是否为水仙花数,以及为什么统计C语言中的水仙花数是非常重要的。
通过学习判断水仙花数的方法,我们可以提高我们的编程技巧和逻辑思维能力。
最后,我们将总结本文的主要内容和结论。
在接下来的正文部分,我们将详细介绍水仙花数的定义以及在C语言中判断水仙花数的具体方法。
希望本文能给读者带来启发和帮助,进而深入理解C语言和编程中的一些基本概念。
1.2 文章结构文章结构部分的内容可以描述本文的组织方式和各个章节的内容概述。
可以参考以下内容:本文按照以下结构进行组织和阐述。
首先,在引言部分(第1章)中,我们会对水仙花数统计的背景和重要性进行概述,并明确本文的目的。
接下来,在正文部分(第2章)中,我们将深入讨论水仙花数的定义和在C 语言中判断水仙花数的方法。
具体来说,我们将从数学角度解释水仙花数的概念,并分享一种基于C语言的判断方法。
在结论部分(第3章)中,我们将探讨统计C语言中的水仙花数的重要性,并对全文进行总结。
通过以上结构安排,本文将系统地介绍水仙花数及其在C语言中的判断方法,旨在提供给读者一个全面且深入的认识。
接下来,让我们深入了解水仙花数的定义(第2.1节)。
1.3 目的本文的目的是通过分析和介绍C语言中水仙花数的判断方法,探讨水仙花数在编程中的重要性和实际应用。
通过理解水仙花数的概念和判断方法,读者可以加深对C语言编程的理解和应用,同时也能够提高编程效率和代码质量。
具体来说,本文的目的包括以下几点:1.介绍水仙花数的定义:首先,我们将详细介绍水仙花数的定义和特征。
水仙花数是一个三位数,它的每个位上的数字的立方和等于其本身。
例如,153是一个水仙花数,因为1³+ 5³+ 3³= 153。
n位数水仙花数c语言程序
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语言代码实现
显然k i >=0 & sum(k i )=n.
k 0 *0^n + k 1 *1^n + ...+ k 9 * 9^n =N(n).
(i=0,1,2...,9)
穷举所有十元组(k 0 ,k 1 ,...,k 9 );
if YES, T(n)=N(n)=Nar(n), print T(n);
else Next S(j+1);
Step3.重复Step 2, until穷举完毕所有的解S集.
*/
#include <stdio.h>
#include <time.h>
#define N 21
#define G 9 //当N=21时,G = count_digit9最多出现的次数是9次----- count_count_digit[i]< MAX/i^N
for(i=0;i<10;i++)
p[i][N-1]=i; //矩阵每行全部初始化为(0,1,2,3,4,5,6,7,8,9)
for(k=2;k<10;k++)
{
for(i=1;i<N;i++)
{
for(j=N-1;j>=0;j--)
{
p[k][j]*=k; //计算k=0-9的N次方p[i][N]=i^N
{
int i,j;
int sum_power[N]={0};//对应N位大数X(N)上第1位到第N位上的数字
//把数字0-9出现次数乘以它的N次方,存在count_mul_power[10][N]数组中
c语言for循环题目经典题
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语⾔时我们曾经接触过⽔仙花数,并⽤C语⾔实现过查找⽔仙花数。
⽔仙花数是指⼀个3位数,它的每个位上的数字的3次幂之和等于它本⾝,例如:13+53+3^3=153。
功能设计
编写的程序需要实现的功能:输出所有的⽔仙花数
设计实现
查找⽔仙花数的过程较为简单,所以在主类中进⾏编写就可以实现。
因为⽔仙花数都是3位数,所以可以使⽤100到999的循环逐个进⾏判断,将三位数n除以100,便可得到百位i;将n减去百位i100,然后再除以10便可求得⼗位j;再⽤n减去百位i100再减去⼗位j*10,得到个位数k。
最后判断百位i的三次⽅加⼗位j的三次⽅加个位k的三次⽅是否与原来的数n相等,若相等则输出该数,否则继续循环,n++。
测试运⾏
核⼼代码
for(n=100;n<1000;n++){ //⽔仙花数为100到999
i = n / 100; //百位
j = (n - i * 100) / 10; //⼗位
k = n - i * 100 - j * 10; //个位
if (i * i * i + j * j * j + k * k * k == n) //如果满⾜⽔仙花数
System.out.println(n); //输出该数
总结
因为之前实现过查找⽔仙花数,所以这次的程序编写过程⼀帆风顺,只需要将C语⾔转化为Java语⾔即可,此过程帮助我重温了⽔仙花数的知识,同时也复习了Java的基本语句。
PSP
步骤耗时(min)百分⽐
需求分析511.1%
设计511.1%
代码实现1022.2%
测试1022.2%
分析总结1533.3%。
C语言题库
C语言题库1. 输入一个整数,判断它是几位数?(*)2. 编制一函数,得到一个整数的某一位的数字。
(*)3. 求出所有的水仙花数。
水仙花数是一个三位数,其各位数字的立方和等于该数。
例如153=1^3+5^3+3^3。
(**)4、编写函数fun求1000以内所有7的倍数之和。
(*)int fun(int m){ }5、将一个数组中的元素按逆序存放。
(*)6、输入三个整数x,y,z,请把这三个数由小到大输出。
(*)7、递归调用计算阶乘, 输入n,求n的阶乘(*)8、删除字符串中的数字字符。
例如:输入字符串:48CTYP9E6,则输出:CTYPE。
(**)9、计算并输出500以内最大的10个能被13或17整除的自然数之和。
(*)10、统计一个字符串中的字母、数字、空格和其它字符的个数。
(*)11、不用第三个变量,实现两个数的对调操作。
(**)12、求1!+3!+5!+……+n!的和。
(**)13、求一批数中最大值和最小值的差。
(*)14、编写函数fun,函数的功能是:求一分数序列2/1,3/2,5/3,8/5,13/8,21/13…的前n项之和。
每一分数的分母是前两项的分母之和;每一分数的分子是前两项的分子之和。
例如:求前20项之和的值为32.660259。
(**)15、打印出如下图(菱形)(**)*************************16、用冒泡法对数组a进行由小到大的排序。
(*)17、求出二维数组中的最大元素值(*)18、输入一个字符串,对字符串逆序输出(*)19、已知一个数列,它的头两项分别是0和1,从第三项开始以后的每项都是其前两项之和。
编程打印此数,直到某项的值超过200为止。
(***)20、计算平均成绩并统计90分以上人数。
(*)21、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?(***)22、判断101-200之间有多少个素数,并输出所有素数。
n位数水仙花数c语言程序
n位数水仙花数c语言程序摘要:一、引言二、什么是水仙花数三、编写C语言程序实现求解n位数水仙花数四、总结正文:一、引言水仙花数,也被称为阿姆斯特朗数,是一个三位数,其每个数字的立方和等于该数本身。
例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。
本篇文章将介绍如何使用C语言编写程序来求解n位数的水仙花数。
二、什么是水仙花数水仙花数是一个三位数,它的每个数字的立方和等于该数本身。
例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。
对于n位数,我们需要找到满足该条件的数。
三、编写C语言程序实现求解n位数水仙花数为了编写求解n位数水仙花数的C语言程序,我们需要先了解如何判断一个数是否为水仙花数。
我们可以通过以下步骤实现:1.获取用户输入的n位数。
2.创建一个循环,用于遍历该数的每一位数字。
3.在循环中,计算当前数字的立方和。
4.如果当前数字的立方和等于该数本身,则输出该数。
以下是一个简单的C语言程序,用于求解n位数水仙花数:```c#include <stdio.h>int main() {int n, i, num, sum = 0;printf("请输入一个n位数: ");scanf("%d", &n);printf("输入的数为: %d", n);for (i = 0; i < n; i++) {num = n % 10;sum += num * num * num;n /= 10;}if (sum == n) {printf("该数为水仙花数。
");} else {printf("该数不是水仙花数。
");}return 0;}```四、总结通过本文,我们了解了水仙花数的概念以及如何使用C语言编写程序来求解n位数的水仙花数。
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个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。
如果该数不在数组中,则输出“无此数”。
水仙花数
水仙花数1.题目水仙花数是一个三位数,其各位上数的立方和等于这个数,例如153,13+53+33=153。
请找出它们来,OK,下面我们就来找一下这种美妙的数。
2.编程简析水仙花数既然是一个三位数,那么它的范围也就再清楚不过了,100~999,所以总计有900种可能的情况。
怎样判断这个数是不是水仙花数呢?因为条件是各位上数的立方和等于这个数,那么如果假设这个数是n,并且各数位从高到低分别是abc,那么abc和n之间有种一一对应关系。
其实我们这里的问题也就成了知道某个数来拆分其数位了。
三个数位拆分如下:a=Intn/100b=Intn-100a/10c=n-100a-b10条件也就是aaa+bbb+ccc=n。
另外,程序的整体结构是循环内套分支。
3.语言、界面、源程序(1)语言通过VirualBASIC6.0语言来实现。
(2)界面界面非常简单,建立一标准EXE工程,其caption设为水仙花数一切OK。
我们将代码加给Form_Click即窗体的单击事件,将来运行时,我们只要用鼠标单击一下窗体,程序就执行了。
(3)源程序OptionExplicitPrivateSubForm_ClickDimnAsInteger'声明变量DimabcAsIntegerForn=100To999a=Intn/100b=Intn-100a/10c=n-100a-b10Ifn=aaa+bbb+cccThenPrintn'输出EndIfNextnEndSub以上程序在VB6.0WIN2000下调试通过4.编程小结这样我们查出了所有的水仙花数,有四个,分别是153,370,371,407。
另外,还有一个编程中非常有意思的思考问题的方法。
在本题中,我们是通过设置设立一个三位数n,然后求出各数位来解题的,当然反之也行,可能这种方法更便于理解,你可以自己试试哦!22222222222222222水仙花数是指一个三位数,其各个数之立方和等于该数。
C语言练习4:找出所有3位数的水仙花数
14
for (j = 0; j < 10; j++)
15
{
16
for (k = 0; k < 10; k++)
17
{
18
m = i * 100 + j * 10 + k;
19
n = i * i * i + j * j * j + k * k * k;
20
if (m == n)
21
{
22
printf("%d\n", m);
View Code
、
、
、
、
、
持之以恒的学习****程序分割线【TOP】******************************/
7 void Daffodils_num_3()
8{
9 int i, j,k;
10 int m, n;
11
12 for (i = 1; i < 10; i++)
13 {
博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
代码如下:
C语言练习 4:找出所有 3位数的水仙花数
1 /*练习题目为:找出所有3位数的水仙花数*/
2
3 #include<stdio.H>
4 #include<stdlib.H>
//设置交互界面的尺寸
34
35 printf("***请按任意键开始***");
36 getchar();
37
38 Daffodils_num_3();
c语言水仙花数的概念 -回复
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. 优化水仙花数的解法上述的解法虽然能够找到所有的水仙花数,但在计算时可能会浪费一些时间。
n位数水仙花数c语言程序
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语言的水仙花数
c语⾔的⽔仙花数c语⾔中循环的三位⽔仙花数题⽬:是说有这样的⼀些三位数,例如:153它能够由111+555+333之和组成。
这样的三位数我们叫作⽔仙花数。
现在要求我们找出这样的所有的⽔仙花数。
即⼀个三位数xyz=x x x+y y y+z z z。
要求:每⼀个⽔仙花数都需要站⼀⾏。
思路:⾸先需要输⼊⼀个三位数,然后需要进⾏验证是否符合⽔仙花数的条件。
那么就需要定义四个未知量来完成。
其中⼀个数字为表⽰那个三位数,另外的三个则表⽰每⼀位数。
参考代码如下:int a,b,c,d;for(d=100;d<1000;d++){a=d/100;//表⽰百位。
b=d/10%10//表⽰⼗位。
c=d%10//表⽰个位。
}然后我们就可以进⾏相应的验证即是否满⾜⽔仙花数的定义。
如果满⾜则进⾏相应的打印处理,并且需要进⾏⼀次换⾏(题⽬要求)参考代码如下:if(d=a*a*a+b*b*b+c*c*c){printf("%d\n",d);}综上所述有如下参考代码:#include <stdio.h>int main(){int a,b,c,d;for(d=100;d<1000;d++){a=d/100;b=d/10%10;c=d%10;if(d==a*a*a+b*b*b+c*c*c){printf("⽔仙花数为:%d\n",d);}}return 0;}。
c语言判断水仙花数函数题
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、。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*(编程题)花朵数
一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。
例如:
当N=3时,153就满足条件,因为1^3 + 5^3 + 3^3 = 153,这样的数字也被称为水仙花数(其中,“^”表示乘方,5^3表示5的3次方,也就是立方)。
当N=4时,1634满足条件,因为1^4 + 6^4 + 3^4 + 4^4 = 1634。
当N=5时,92727满足条件。
实际上,对N的每个取值,可能有多个数字满足条件。
程序的任务是:求N=21时,所有满足条件的花朵数。
注意:这个整数有21位,它的各个位数字的21次方之和正好等于这个数本身。
如果满足条件的数字不只有一个,请从小到大输出所有符合条件的数字,每个数字占一行。
因为这个数字很大,请注意解法时间上的可行性。
要求程序在3分钟内运行完毕。
*/
/*
本程序比较容易理解。
执行时间40秒左右(P6100处理器,2G内存,WIN7系统)。
思路:
任何一个水仙花数,比如153=1^3+5^3+3^3,里面包括1个1,1个5,1个3。
如果是513,315,351这样的数字……,虽然这几个不是水仙花数,但这几个数字中1,3,5出现的次数和水仙花数是一样的……那么513,315,351这些数字,每位上数字的和应该就是水仙花数。
如果是从1000……-9999……的枚举法,我想问题肯定大了。
而如果采用上面的方法,这样的话,采用对数字出现次数进行枚举会让程序加快很多。
*/
#include <stdio.h>
#include <time.h>
int num_time[10]={0}; //num_time[10]用来得到0-9数字出现的个数
int sum[10][21]={(0,0)},sumc[10][21]={(0,0)}; //sum数组用来计算出0-9的21次方。
sumc用来计算数字出现次数*它的21次方
int count=0; //计算得到几个水仙花数了,得到2个以后就结束程序
void initProgramm() //这个函数用来获得0-9的21次方,存在sum数组里
{
int i,j,k;
for(i=0;i<10;i++)
sum[i][20]=i;
for(k=2;k<10;k++)
{
for(i=1;i<21;i++)
{
for(j=20;j>=0;j--)
{
sum[k][j]*=k;
}
for(j=20;j>0;j--)
{
sum[k][j-1]+=sum[k][j]/10;
sum[k][j]%=10;
}
}
}
}
void check(int i0,int i1,int i2,int i3,int i4,int i5,int i6,int i7,int i8,int i9) //检测数字是不是水仙花数
{
int i,j;
int getAdd[21]={0};
for(j=0;j<21;j++) //把数字出现次数*它的21次方
{
sumc[1][j]=sum[1][j]*i1;
sumc[2][j]=sum[2][j]*i2;
sumc[3][j]=sum[3][j]*i3;
sumc[4][j]=sum[4][j]*i4;
sumc[5][j]=sum[5][j]*i5;
sumc[6][j]=sum[6][j]*i6;
sumc[7][j]=sum[7][j]*i7;
sumc[8][j]=sum[8][j]*i8;
sumc[9][j]=sum[9][j]*i9;
}
for(i=0;i<10;i++) //进位
for(j=20;j>0;j--)
{
sumc[i][j-1]+=sumc[i][j]/10;
sumc[i][j]%=10;
}
for(i=0;i<10;i++) //得到一个数每位的21次方的和,就是把sumc叠加起来for(j=20;j>=0;j--)
getAdd[j]+=sumc[i][j];
for(i=20;i>0;i--) //进位
{
getAdd[i-1]+=getAdd[i]/10;
getAdd[i]%=10;
}
int j1=0,j2=0,j3=0,j4=0,j5=0,j6=0,j7=0,j8=0,j9=0,j0=0;
for(i=20;i>=0;i--) //用来判断和里面每个数字出现的次数
{
switch(getAdd[i])
{
case 0:j0++;break;
case 1:j1++;break;
case 2:j2++;break;
case 3:j3++;break;
case 4:j4++;break;
case 5:j5++;break;
case 6:j6++;break;
case 7:j7++;break;
case 8:j8++;break;
case 9:j9++;break;
}
}
/*如果一个数字,和里0-9出现的次数与这个数字里0-9出现的次数相同,那么和就应该是水仙花数(第一位数字不能为0)*/
if((i0==j0)&&(i1==j1)&&(i2==j2)&&(i3==j3)&&(i4==j4)&&(i5==j5)&&(i6==j6)&&(i7==
j7)&&(i8==j8)&&(i9==j9)&&(getAdd[0]!=0))
{
printf("\n");
count++;
for(i=0;i<21;i++)
printf("%d",getAdd[i]);
printf("\n");
}
}
void main()
{
int t,t1,t2;
initProgramm();
t1=time(NULL);
int i0,i1,i2,i3,i4,i5,i6,i7,i8,i9;
for(i9=0;i9<10;i9++)
{
for(i0=1;i0<22;i0++)
{
if(count==2) //出现2个水仙花数以后break
break;
if(i9+i0==21) //几个数字的出现次数和为21以后就break,因为后面的数字出现次数和一定大于21,就超过了21位
{ check(i0,0,0,0,0,0,0,0,0,i9);break;}
for(i2=0;i2<22;i2++)
{
if(count==2)
break;
if(i9+i0+i2==21)
{ check(i0,0,i2,0,0,0,0,0,0,i9);break;}
for(i3=0;i3<22;i3++)
{
if(count==2)
break;
if(i9+i0+i2+i3==21)
{ check(i0,0,i2,i3,0,0,0,0,0,i9);break;}
for(i4=0;i4<22;i4++)
{
if(count==2)
break;
if(i9+i0+i2+i3+i4==21)
{ check(i0,0,i2,i3,i4,0,0,0,0,i9);break;}
for(i5=0;i5<22;i5++)
{
if(count==2)
break;
if(i9+i0+i2+i3+i4+i5==21)
{ check(i0,0,i2,i3,i4,i5,0,0,0,i9);break;}
for(i6=0;i6<22;i6++)
{
if(count==2)
break;
if(i9+i0+i2+i3+i4+i5+i6==21)
{ check(i0,0,i2,i3,i4,i5,i6,0,0,i9);break;}
for(i7=0;i7<22;i7++)
{
if(count==2)
break;
if(i9+i0+i2+i3+i4+i5+i6+i7==21)
{ check(i0,0,i2,i3,i4,i5,i6,i7,0,i9);break;}
for(i8=0;i8<22;i8++)
{
if(count==2)
break;
if(i9+i0+i2+i3+i4+i5+i6+i7+i8==21)
{ check(i0,0,i2,i3,i4,i5,i6,i7,i8,i9);break;}
for(i1=0;i1<22;i1++)
{
if(count==2)
break;
if(i9+i0+i2+i3+i4+i5+i6+i7+i8+i1==21)
{
check(i0,i1,i2,i3,i4,i5,i6,i7,i8,i9);break;}
}
}
}
}
}
}
}
}
}
}
t2=time(NULL);
t=t2-t1;
printf("\n%d s\n",t);
}。