#include<math.h>
#include <stdlib.h>
#include<time.h>
#include<windows.h>
int main(void)
{
double n,k,t1,t2,t3,ge,shi,bai,qian,wan,shiwan,baiwan,qianwan,yi,shiyi
int i,m,aFILE *pp=fopen("123.txt","a")t1=t2=t3=0 int y,b,c,j
clock_t start,finish,zhishi,zhizhong,kkk,mmm
k=t1=t2=ge=shi=bai=qian=wan=0a=i=0n=3
m=9
printf("水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。\n")
printf("例如:153=1^3+5^3+3^3。而本程序将探索9位以内的水仙花数\n")
printf("本次运算将会保存结果为123.txt到本程序根目录下\n")
system("pause")
kkk=clock()
onceagain:
i=10a++
printf("第%d回合开始:\n",a)
printf("本次计算%.0lf位的水仙花数\n",n)
fprintf(p,"\n%.0lf位水仙花数:",n)
zhishi=clock()
for()
{
i++
if(i==11){start=clock()}
if(n==3&&i==11) {i=100}
if(n==4&&i==11) {i=1000}
if(n==5&&i==11) {i=10000}
if(n==6&&i==11) {i=100000}
if(n==7&&i==11) {i=1000000}
if(n==8&&i==11) {i=10000000}
if(n==9&&i==11) {i=100000000}
y=ik=0
do {
c=y%10
y=y/10
j=1
b=c
while(j<n)
{
b=b*c
j++
}
k=k+b
}while(y>0)
/*ge= i/ 1% 10
shi= i/ 10% 10
bai= i/ 100% 10
qian= i/ 1000% 10
wan= i/ 10000% 10
shiwan= i/ 100000% 10
baiwan= i/ 1000000% 10
qianwan=i/ 10000000% 10
yi= i/ 100000000% 10
shiyi= i/1000000000% 10*/
/*k=pow(ge,n)+pow(shi,n)+pow(bai,n)+pow(qian,n)+pow(wan,n)
k=pow(shiwan,n)+pow(baiwan,n)+pow(qianwan,n)+pow(yi,n)+pow(shiyi,n)+k*/
/*如上被注释成伪代码的部分是第一代代码,效率低*/
if(k==i){finish=clock()t1=(double)(finish-start)/CLOCKS_PER_SECstart=clock()}
if(k==i){printf("%.0lf 算出该答案耗时:%.3lf秒\n",k,t1)}
if(k==i){fprintf(p,"\n%.0lf 算出该答案耗时:%.3lf秒",k,t1)}
if(n==3 &&i>999){break}
if(n==4 &&i>9999){break}
if(n==5 &&i>99999){break}
if(n==6 &&i>999999){break}
if(n==7 &&i>9999999){break}
if(n==8 &&i>99999999){break}
if(n==9 &&i>999999999){break}
}
zhizhong=clock()t2=(double)(zhizhong-zhishi)/CLOCKS_PER_SEC
printf("第%d回合结束,本次运行共耗时%.3lf秒\n\n",a,t2)
fprintf(p,"\n本次运行共耗时%.3lf秒\n",t2)
if(n<m){n++goto onceagain}
else
{mmm=clock()t3=(double)(mmm-kkk)/CLOCKS_PER_SECprintf("本次程序完成所有任务共耗时%.3lf秒\n",t3)fprintf(p,"\n本次运行共耗时%.3lf秒\n",t3)
system("pause")
return 0}
}
我原创的,不要转载!转载请转载本页面地址!
目前我只会简单粗暴的穷举法,其他的就请另一位大神了。
代码如下:
#include <stdio.h>
int main()
{
printf("输出水仙花数:\n")
int i=100
for( i<1000i++){
int num_0 = i%10
int num_1 = i/10%10
int num_2 = i/10/10%10
if(i==(num_0*num_0*num_0+num_1*num_1*num_1+num_2*num_2*num_2))
printf("%d\t", i)
}
return 0
}
扩展资料:
自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。
n为1时,自幂数称为独身数。显然,0,1,2,3,4,5,6,7,8,9都是自幂数。
n为2时,没有自幂数。
n为3时,自幂数称为水仙花数,有4个:153,370,371,407;
n为4时,自幂数称为四叶玫瑰数,共有3个:1634,8208,9474;
n为5时,自幂数称为五角星数,共有3个:54748,92727,93084;
n为6时,自幂数称为六合数, 只有1个:548834;
n为7时,自幂数称为北斗七星数, 共有4个:1741725,4210818,9800817,9926315;
n为8时,自幂数称为八仙数, 共有3个:24678050,24678051,88593477;
n为9时,自幂数称为九九重阳数,共有4个:146511208,472335975,534494836,912985153;
n为10时,自幂数称为十全十美数,只有1个:4679307774。
参考资料:
百度百科——水仙花数
#include "stdio.h"#include<graphics.h>
#include "conio.h"
#include<stdlib.h>
#include<string.h>
void main()
{void adm1(),adm2(),build(),huan(),borrow(),dele()
adm1()
}
void adm1()
{ FILE *fp,*p
char adp[20],password[20]
int i,n=0
textbackground(2)
clrscr()
gotoxy(25,12)
fp=fopen("pass","r")
if(fp==NULL) { printf("no exit ")getch()exit(0)}
printf("input password:")
for()
{
window(42,12,53,12)
textbackground(0)
clrscr()
gets(adp)
for(i=0adp[i]!='\0'i++)
fgets(password,i+1,fp)
gotoxy(55,12)
if(strcmp(password,adp)==0)
{ window(55,12,70,12)clrscr()cprintf("YES")getch()adm2()getch()exit(0)}
else{ n++
window(55,12,60,12)clrscr()gotoxy(55,12)cprintf("error")
for(i=0i<30i++) delay(8000)
if(n==2)
{ window(55,12,70,12)clrscr()gotoxy(55,12)cprintf("once
again")for(i=0i<=30i++) delay(8000)}
if(n==3)
{ window(55,12,70,12)clrscr()gotoxy(55,12)cprintf("3 second
out")for(i=0i<=30i++) { delay(8000)}
exit(0)
}
}
fclose(fp)clrscr()
}
}
void adm2()
{ char a
window(1,1,80,25)
clrscr()
for()
{ clrscr()
gotoxy(30,8)printf("built a new user (B)")
gotoxy(30,10)printf("return book (R)")
gotoxy(30,12)printf("borrow books (J)")
gotoxy(30,14)printf("delete user (D)")
a=getch()
if(a=='b') build()
if(a=='r') huan()
if(a=='j') borrow()
if(a=='d') dele()
else continue
}
}
void build()
{ FILE *f,*p
char id[20],name[20],sex[2],age[3],grad[50]
window(1,1,80,25)
clrscr()
printf("ID number:")
scanf("%s",id)
printf("name:")
scanf("%s",name)
printf("sex:")
scanf("%s",sex)
printf("grad:")
scanf("%s",grad)
p=fopen(id,"w+")
if(p==NULL) { printf("can't build that user")getch()adm2()}
fprintf(p,"%s ",name)
fprintf(p,"%s ",id)
fprintf(p,"%s ",sex)
fprintf(p,"%s ",grad)
printf("bulid success")
getch()
fclose(p)
}
void huan()
{
FILE *fp,*p,*f
char id[20],a[5][50],name[20],c
int i=0,m,k clrscr()
printf("input ID number:")
scanf("%s",id)
p=fopen(id,"r")
if(p==NULL) { printf("error")getch()fclose(p)exit(0)}
fscanf(p,"%s",name)
fclose(p)
fp=fopen(name,"r")
do{ fscanf(fp,"%s",a[i++]) }while(!feof(fp))
for(k=0k<i-1k++) printf("\nbook %d: %s",k+1,a[k])
fclose(fp)
f=fopen(name,"w+")
for()
{
printf("\n\npress the book number that you want to return. \n
\nPress 6 if you want to return all. \n\npress 7 to cancle.\n")
scanf("%d",&m)
if(m==7) { for(k=0k<i-1k++)
{
fprintf(f,"%s\n",a[k])
}
fclose(f)
adm2()
}
if(m==6) remove(name)
if(m<6)
for(k=0k<i-1k++)
{ if(k!=m-1)
fprintf(f,"%s\n",a[k])
}
printf("book %d has returned.",m)
printf("\ncontinue? (Y/N)")
c=getch()
if(c=='y') continue
if(c=='n') { fclose(f)adm2()}
}
}
void borrow()
{ FILE *f,*m,*p
char id[20],book[5][50],name[20],c
int i=0,n=0,k
window(1,1,80,25)clrscr()
printf("please input the user's ID:")
scanf("%s",id)
m=fopen(id,"r")
if(m==NULL) { printf("user no exit")getch()fclose(m)adm2()}
fscanf(m,"%s",name)
fclose(m)
p=fopen(name,"r")
if(p==NULL)
else
{ while(!feof(p))
{
fscanf(p,"%s",book[i])
i++
}
i--
for(k=0k<ik++) printf("\nbook %d :%s",k+1,book[k])
}
fclose(p)
f=fopen(name,"w")
printf("\nhow many book do you want to borrow?:")
do{printf("\ninput:")scanf("%d",&n) }while(i+n>=6)
for(k=ik<i+nk++)
{ printf("\nbook %d :",k+1)
scanf("%s",book[k])
}
for(k=0k<i+nk++) fprintf(f,"%s\n",book[k])
fputc('\0',f)
printf("success")
fclose(f)
}
void dele()
{ FILE *fp,*f
char id[20],a[4][20],c,b[5][50]
int i=0,j=0,k
window(1,1,80,25)clrscr()
printf("Input ID number:")
scanf("%s",id)
fp=fopen(id,"r")
if(fp==NULL) { printf("\nuser isn't exit")getch()
fclose(fp)adm2()}
else while(!feof(fp))
{ fscanf(fp,"%s",a[i++])}
printf("\nname: %s",a[0])
printf("\nID: %s",a[1])
printf("\nsex: %s",a[2])
printf("\ngrad: %s",a[3])
f=fopen(a[0],"r")
if(f==NULL)
else {
while(!feof(f))
{ fscanf(f,"%s",b[j++])}
for(k=0k<j-1k++) printf("\nbook %d: %s",k+1,b[k])
}
printf("\nDo you want to delete? (Y/N): ")
c=getch()
fclose(fp)
fclose(f)
if(c=='y')
{ remove(id)remove(a[0])printf("\nsuccess")getch()adm2()}
if(c=='n') adm2()