您的位置:首页 > 其它

39节课后再解

2015-12-20 23:02 260 查看
项目二    求 n=a!+b!+c!  n为三位数,a,b,c分别是n的百十个位

代码:

#include <stdio.h>
int main()
{
int s,sum,sumb,sumc,i,a,b,c;
for(s=0;s<1000;s++)
{
a=s/100;
b=(s%100)/10;
c=s%10;
if(a<6&&b<6&&c<6)
{
sum=1;
for(i=1;i<=a;i++)//百位数不可能等于0
sum=sum*i;

sumb=1;
if(b==0)
sumb=0;
else
for(i=1;i<=b;i++)
sumb=sumb*i;

sumc=1;
if(c==0)
sumc=0;
else
for(i=1;i<=c;i++)
sumc=sumc*i;
}
if(sum+sumb+sumc==s)
printf("%d\n",s);
}
return 0;
}
项目三
1.代码:

/*输入一个正整数,输出它的反序数(反序数,即将其所有位的数字反过来。例如,123是321的反序数*/
#include <stdio.h>
int main()
{
int n,i;
scanf("%d",&n);
i=(n%10)*100+(((n/10))%10)*10+n/100;
printf("%d",i);
return 0;
}
2.代码:
/*求1000000以内的正整数n,要求9n是n的反序数*/
#include <stdio.h>
int main()
{
int n,m,k;
int a=100,b=111;//111112乘9超过100万,所以只要计算100000-111111的数,111,1111,11111同理
while(b<=111111)
{for(n=a; n<b; n++)
{
k=n;
m=0; //m将为n的反序数
while(k>0)
{
m=m*10+k%10;
k=k/10;
}
if(m==9*n) //n的反序数m等于9n
printf("%d ", n);
}
a*=10;b=b*10+1;
}
printf("\n");
return 0;
}


这题自己的算法惨不忍睹,所以参考了老师的解答,排除了大部分的数,让程序更效率
项目四

1.代码:略

2.代码:

/*求1000000以内的正整数n,要求9n是n的反序数*/
#include <stdio.h>
int main()
{
int k,n,p;
for(p=1;p<=10000;p++)
{
k=p;
n=0;
while(k>0)
{
n=n*10+k%10;
k=k/10;
}
if(n==p)
printf("%d\n",n);
}
return 0;
}
这题其实跟求反序数是一样的解法,重点要学习贺老师的算法。今天就到这里了!~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: