Ⅰ c语言的水仙花数,怎么搞
#include<stdio.h>
#include<math.h>
int main() {
int N,i,sum,n;
scanf("%d",&N);//输入
for(i=pow(10,N-1);i<pow(10,N);i++)//N是几位数,循环就从10的N-1次方至N次方,比如说N为3,那就是10的2次方(100)至10的3次方(1000)
{
sum=0;
n=i;
while(n)
{
sum+=pow(n%10,N);//计算每一位的N次方的和至sum
n=n/10;
}
if(sum==i) printf("%d\n",i);//比较和是否与原数i相等,如果相等则为水仙花数并输出
}
}
Ⅱ 关于C语言水仙花数的问题
函数里边传过去的值赋给了number,但是没有给i
加个i=number;
另外 主函数里边的输出部分printf("%d\n",i);百分号别丢了。
刚开始学写程序都会有一定的粗心 以后多写多练就好了
Ⅲ c语言 水仙花数问题
看看你的18行:
else if(i>0) printf(" %d\n",s);
第二个左括号打成中文的了,需要修改为:
else if(i>0) printf(" %d\n",s);
Ⅳ c语言求水仙花数!!!!
#include"stdio.h"
intmain(intargc,char*argv[]){
intn,i,j,k,t,s,m,x;
printf("Pleaseentern(int2<n<8)... n=");
if(scanf("%d",&n)!=1||n<3||n>7){
printf("Inputerror,exit... ");
return0;
}
for(k=1,i=0;i<n;i++,k*=10);
for(i=k/10;i<k;i++){
for(s=0,t=i;t>0;t/=10){
for(x=1,j=t%10,m=n;m--;x*=j);
s+=x;
}
if(s==i)
printf("%d ",s);
}
printf(" ");
return0;
}
运行样例:
Ⅳ C语言求水仙花数问题
for(int n=100;n<1000;n++){ 后面加上一句 result=0.0;
if(result==n) printf("%d是水仙花数\n",n); 这句应该在第二个for循环外
Ⅵ C语言判断水仙花数题目。
#include<stdio.h>
#include<math.h>
//第一,养成变量初始化的好习惯。变量声明后记得要初始化。
//第二,while条件里面貌似是不能写输入语句的,你完全可以提出来写。
//第三,取出n的每一位的算法可以用取余代替你的减法。比如371,首位371/100,第二位371%10/10,第三位371%10。
int main()
{
int a,b,c,d,e,f=0; //初始化
double k,i,j=0;
int n=0; //声明位数
double g=0;
scanf("%lf",&k); //从键盘读取
scanf("%d",&n); // 手动获取位数
//while (scanf("%d",&k)&&k) //不能这么写,而且可以去掉
//{
i=k;
a = i/100000; //单行注释是双斜杠/求i的十万分位/
b=(i-100000*a)/10000;
c=(i-100000*a-10000*b)/1000;
d=(i-100000*a-10000*b-1000*c)/100;
e=(i-100000*a-10000*b-1000*c-d*100)/10;
f=i-100000*a-10000*b-1000*c-d*100-e*10;
j=pow(a,n)+pow(b,n)+pow(c,n)+pow(d,n)+pow(e,n)+pow(f,n);
//g=(double) j; //g前面已经声明过了
if (j==k)
printf("Yes\n");
else
printf("No\n");
// }
return 0;
}
你这程序改的我心累~ 还有很多可优化的地方 自己慢慢学吧
Ⅶ 水仙花数的c语言编程。
C语言具体实现水仙花过程如下:
一、问题描述:
输出所有的“水仙花数”,所谓的“水仙花数”是指一个三位数其各位数字的立方和等于该数本身,例如153是“水仙花数”,因为:153 = 13 + 53 + 33。
二、问题分析:
根据“水仙花数”的定义,判断一个数是否为“水仙花数”,最重要的是要把给出的三位数的个位、十位、百位分别拆分,并求其立方和(设为s),若s与给出的三位数相等, 三位数为“水仙花数”,反之,则不是。
三、算法设计:
“水仙花数”是指满足某一条件的三位数,根据这一信息可以确定整数的取值范围是 100〜999。对应的循环条件如下:
for(n=10; n<1000; n++) { //...... }
四、完整的代码:
Ⅷ 用C语言编写水仙花数时遇到了问题,希望得到高手的指点。407输不出来!!
个人觉得这是一个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),就认为他们是相等的。