>凡事网 导航

用C语言编写水仙花数时遇到了问题,希望得到高手的指点。407输不出来!! 用c语言编程,求水仙花数。注意是用c语言。求高手!

2024-06-26m.fan-pin.com
while语句C语言编写程序打印出100到999的水仙花数,程序有误打不出来,求高手指点一二,不胜感激代码如下~

#includeint main(){ int a=1,b=0,c=0; while(a<=9) { while(b<=9) { while(c<=9) { if(a*a*a+b*b*b+c*c*c==a*100+b*10+c*1) printf("%d=a*a*a+b*b*b+c*c*c
",a*100+b*10+c*1); c++; } b++; c=0;//初始化 } a++; b=0;// 初始化 } return 0;}新手经常犯得问题,初始化的问题,这就是for比wihle强的地方,for会提醒你初始化,而while不会

/*此程序没有考虑必须m<=n和m,n除了均为零外必须为3位数的整数
所以测试的时候要注意输入正确,如有需要可自行添加判断
*/
#include "stdio.h"

void main()
{
int m,n,num,i,j,k;
bool yn=false;
scanf("%d %d",&m,&n);
while(m!=0||n!=0)
{
for(num=m;num<n+1;num++)
{
i=num/100;
j=(num-i*100)/10;
k=num%10;
if(i*i*i+j*j*j+k*k*k==num)
{
yn=true;
printf("%d ",num);
}
}
if(!yn)printf("no");
printf("
");
scanf("%d %d",&m,&n);
}
}

个人觉得这是一个rounding error的问题。简单的说吧,我们在写代码的时候,可以选择整数输入,但是计算机只能进行2进制计算。如0.1,在10进制里,这个很好表达。但是在2进制里,他的结果是:0.00011001100110011…是一个无穷数,所及计算的结果是会有误差的。
两个程序的关键差别在于if的数字的判断,也就是IF语句
if(fabs((pow(a,3)+pow(b,3)+pow(c,3))-i)<=1.0e-6),这句话恰恰是通过我们人为的设置,来回避rounding error。也就是说,我们不需要两个数完全相等,只要他们的差值地绝对值(fabs)小于一个很小的数(在这里他设定的是1.0e-6),就认为他们是相等的。

也许的机子的原因吧,我的机子运行第一个程序结果有407.
好多书上说比较浮点数不能直接等于,要向你第二个程序写的那样写。
其实这道题可以不让它转化成浮点数。

#include <stdio.h>

int main()
{
int i,a,b,c;
printf("水仙花数:\n");
for(i=100;i<=999;i++)
{
a=i/100;
b=(i%100)/10;
c=i%10;
if(a*a*a+b*b*b+c*c*c==i)
{
printf("%d\n",i);
}
}
return 0;
}

请用C语言编写一个完整的.求水仙花数的程序
while(n>0);\/\/得到n位数,各位上数的n次方加和,放入判断器 if(s==int(i))printf("%.0lf是水仙花数",i);\/\/若判断器与原数相等则输出 } \/\/从理论来讲,这个实现起来比较复杂,理论最大的水仙花数有33位...下面列出24位以内所有水仙花数 153,370,371,407 1634,8208,9474 5: 93084...

写了一串水仙花数的C语言,但是运算总是出错。
这一条语句:if(num==hd*hd*hd+td*td*td+sd*sd*sd);最后面多打了一个分号;应该是:if(num==hd*hd*hd+td*td*td+sd*sd*sd)多打分号后,if条件判断失效,因此逐一输出

c语言求1000以内的水仙花数可以用什么循环语句?
用C语言求1000以内的水仙花数可以用for循环。可以参考下面的代码:include<stdio.h> main(){ int i=0,g,s,b,a=0;for(i=0;i<1000;i++){ if(i>=100&&i<=999){ b=i\/100;s=(i-b*100)\/10;\/\/除10 g=i-b*100-s*10;a=b*b*b+s*s*s+g*g*g;} if(a==i)printf("%d\\n...

用C语言编一个可以列出所有三位数的水仙花数如153=1^3+5^3+3^3...
一、 数学定义:水仙花数是指一个 n 位正整数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。于是三位水仙花数,就是形式为n=100a+10b+c 且n=a*a*a+b*b*b+c*c*c的数值。 其中a∈[1,9] b,c∈[0,9] a,b,c∈Z 二、 根据定义,循环遍历100到999,通过除法和模除...

c语言编写程序 水仙花数 玫瑰花数
1 include <stdio.h> include <stdlib.h> int flower(int n){ int i, j, k;i = n % 10;j = n \/ 10 % 10;k = n \/ 100;if (i*i*i + j*j*j + k*k*k == n)return 1;else return 0;} int main(void){ int i;for (i = 100; i < 1000; i++){ if (flower...

C语言 水仙花数 我编的程序是错的,但不知道哪错了,求高手帮忙看看_百度...
\/*输入两个正整数m和n(m>=1,n<10000),输出m到n之间的所有水仙花数*\/ include <stdio.h> int main(void){ int a,b,c,s,i,d=0,m,n;printf("Input m,n:");scanf("%d,%d",&m,&n);for(i=m;i<=n;i++){ if((i>=100)&&(i<1000)){ a=i\/100;b=i%100\/10;c=i%10;...

c语言 编写一个判断是否为水仙花数的函数,并通过调用该函数打印输出所有...
include<stdio.h> include<math.h> 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...

C语言求水仙花数,结果有问题。
你应该是在Windows平台编写这个的吧。。。在Windows上:int x, y, z;pow(x,3)+pow(y,3)+pow(z,3) 不恒等于 pow(z,3)+pow(y,3)+pow(x,3)刚好x = 4, y = 0 z = 7不符合这个。。所以就给舍去了。。在任何平台对于浮点数:A op B op C 不恒等于 A op ( B op C...

c语言。。用if语句编程,输入一个三位数,判断是否为水仙花数。
用if语句编程,输入一个三位数,判断是否为水仙花数,可以参考以下的代码:include<stdio.h> main(){ int x,a,b,c;scanf("%d",x);a=x\/100;b=(x\/10)%10;c=x%10;if(x==a*a*a+b*b*b+c*c*c)printf("YES");else printf("NOT");} ...

C语言,关于水仙花数的问题
int不能用啦。n<=32767正常,否则出错,你经管输入的是正数,但是系统看来n是一个负数啦

相关链接2

返回顶部
凡事房车自主流
凡事网