Ⅰ 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),就認為他們是相等的。