“水仙花数”C语言程序

“水仙花数”程序怎么写啊... “水仙花数”程序怎么写啊 展开
 我来答
相失方声牛在1F
2017-12-20 · TA获得超过207个赞
知道答主
回答量:106
采纳率:100%
帮助的人:20.1万
展开全部
#include<stdio.h>
#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,a;FILE *p;p=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=0;a=i=0;n=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=10;a++;
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=i;k=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_SEC;start=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_SEC;printf("本次程序完成所有任务共耗时%.3lf秒\n",t3);fprintf(p,"\n本次运行共耗时%.3lf秒\n",t3);
system("pause");
return 0;}
}

简单粗暴的穷举法。你可以自己简单修改一下应付作业。拒绝任何形式的转载!谢谢!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
通亮且顺畅丶比目鱼e
2010-06-04 · TA获得超过488个赞
知道小有建树答主
回答量:198
采纳率:50%
帮助的人:146万
展开全部
#include <stdio.h>
void main()
{
int i, m,a,b,c;
for(m=100;m<1000;m++)
{
a=m/100;
b=(m-a*100)/10;
c=m-a*100-b*10;
i=a*a*a+b*b*b+c*c*c;
if(m==i)
printf("%d ",m);
continue;
}

}
/*153 370 371 407*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式