十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
水仙花数是指一个 n 位数 ( n≥3 ),每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)。
创新互联专注于洮南网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供洮南营销型网站建设,洮南网站制作、洮南网页设计、洮南网站官网定制、微信小程序服务,打造洮南网络公司原创品牌,更为您提供洮南网站排名全网营销落地服务。
所以可以依次通过模除求得每个位上的值,然后做n次幂后相加,再判断是否与本身相等,从而得到是否为水仙花数的结论。
以求所有三位数水仙花数为例,代码如下,其它相似。
#includestdio.h
#includestdlib.h
#includestdbool.h
int cube(const int n){//计算立方。如果是四位则是四次方,以此类推。
return n*n*n;
}
int isNarcissistic(const int n){//计算是否为水仙花数。
int hundreds=n/100;//百位
int tens=n/10-hundreds*10;//十位
int ones=n%10;//个位
return cube(hundreds)+cube(tens)+cube(ones)==n;//如果相等,则为水仙花数。
}
int main(void){
int i;
for(i=100;i1000;++i){//对所有三位数判断。
if(isNarcissistic(i))//如果是则输出。
printf("%d\n",i);
}
return 0;
}
#includelt;stdio.hgt;
#includelt;math.hgt;
int narcissistic(int number);
void PrintN(int m,int n);
int main()
{
int m,n;
scanf("%d%d",m,n);
if(narcissistic(m))printf("%d is a narcissistic number\n",m);
PrintN(m,n);
if(narcissistic(n))printf("%d is a narcissistic number\n",n);
return 0;
}
int narcissistic(int number){
int i,n=0,sum=0,cnt=0;
n=number;
while(n){
cnt++;
n/=10;
}
n=number;
while(n){
i=n%10;
sum+=(int)pow(i,cnt);
n/=10;
}
if(sum==number)
return 1;
else
return 0;
}
void PrintN(int m,int n){
int i;
for(i=m+1;ilt;n;i++)
if(narcissistic(i))
printf("%d\n",i);
}
扩展资料:
printf函数使用注意事项
1、域宽
%d:按整型数据的实际长度输出。
如果想输出指定宽度可以指定域宽,%md--gt,m域宽,打印出来以后,在控制台上,显示m位;
如果要打印的数的位数如果超过我们设定m则原样输出;
如果要打印的数的位数如果小于设定的位数,则补空白,具体如下:
如果m为正数,则左对齐(左侧补空白);
如果m为负数,则右对齐(右侧补空白)。
2、转义字符
如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示。
如:printf("%f%%",1.0/3);输出结果:0.333333%。
参考资料:
百度百科——水仙花数
#includestdio.h
int sxh(int number);//sxh=水仙花数
int main()
{
int i;
printf("输出1-10000间的水仙花数:");
for(i=1;i=10000;i++)
{
if(sxh(i))
printf("%5d",i);
}
printf("\n");
return 0;
}
int sxh(int number) //定义判断水仙花数的函数
{
int sum=0,item,count=1,i=1,temp;
temp=number;
while(temp=10)
{
count++; //判断位数
temp/=10;
}
temp=number;
while(i=count)
{
item=temp%10;
temp/=10;
sum=sum+item*item*item;
i++;
}
if(sum==number)
return 1;
else
return 0;
}