本人初学者,求下题的代码,配有解释最好

goodxiaoxiao 2007-07-26 11:17:34
求这样一个三位数,该三位数等于其每位数字的阶乘之和。
即 abc = a! + b! + c!
...全文
258 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
juicee 2007-07-27
  • 打赏
  • 举报
回复
纯C的话输出cout << i << endl;改成printf("%d\n",i);
juicee 2007-07-27
  • 打赏
  • 举报
回复
const unsigned long MAX_NUM = 1000; -----> const UINT MAX_NUM = 1000;
goodxiaoxiao 2007-07-27
  • 打赏
  • 举报
回复
不是自己输入,而是要直接生成答案
juicee 2007-07-27
  • 打赏
  • 举报
回复
UINT factor(UINT a)
{
if(a == 1) return 1;
if(a == 0) return 0;
return a*factor(a-1);
}
UINT GetNumFactor(UINT num)
{
UINT temp = 0;
UINT sum = 0;
while (num)
{
temp = num%10;
sum += factor(temp);
num /= 10;
}
return sum;
}
int main()
{
const unsigned long MAX_NUM = 1000;
for (UINT i = 100; i < MAX_NUM; ++i)
{
if (i == GetNumFactor(i))
{
cout << i << endl;
}
}
return 0;
}
juicee 2007-07-27
  • 打赏
  • 举报
回复
- -楼主应该不是说自己一个个试着输入吧。。
deltax 2007-07-27
  • 打赏
  • 举报
回复
#include <stdio.h>
int con(int);//判断是否附合条件
long fact(int);//取阶乘
int main(void){
int num;
printf("Please insert the number:\n");
scanf("%d",&num);
if(con(num))
printf("The number is right!\n");
else
printf("The number is wrong!");
return 0;

}
int con(int n){
int a= n/100;
int b= (n-a)/10;
int c=n-a-b;
if(fact(a)+fact(b)+fact(c)==n)
return 1;
else
return 0;
}
long fact(int n){
long ans;
if (n>0)
ans = n*fact(n-1);
else
ans = 1;
return ans;
}
LCC-WIN32上编译通过
windboyzsj 2007-07-27
  • 打赏
  • 举报
回复
............
再更正:
for(;c>1;c--)
{
z*=c;
}
goodxiaoxiao 2007-07-27
  • 打赏
  • 举报
回复
#include "stdio.h"
int main()
{
int i,t,k,a[3];
printf("there are follwing number\n");
for (i=100;i<1000;i++)
{
for(t=0,k=1000;k>=10;t++)
{
a[t]=(i%k)/(k/10);
k/=10;
}
if(fact(a[0])+fact(a[1])+fact(a[2])==i)
printf("%5d",i);
}
printf("\n");
}
int fact(int n){
int ans;
if (n>0)
ans = n*fact(n-1);
else
ans = 1;
return ans;
}
huiminlee 2007-07-27
  • 打赏
  • 举报
回复
从另外一个角度考虑,0——9 这十数字中阶乘小于1000的只有0——6,6的阶乘是720,所以使用6*6*6次判断就能找到所有符合条件是数。
fbxcjsw 2007-07-27
  • 打赏
  • 举报
回复
/* if(b==0)
sumb=0;
else */
/* if(c==0)
sumc=0;
else */

删掉那几句 没用
fbxcjsw 2007-07-27
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<math.h>
main()
{
int i,a,b,c,suma,sumb,sumc;
clrscr();
for(i=100;i<=999;i++)
{
a=i/100;
b=i/10%10;
c=i%10;

for(suma=1;a>1;a--)
{
if(a==1)
break;
else
suma=suma*a;
}
if(b==0)
sumb=0;
else
sumb=1;
for(;b>1;b--)
{
sumb=sumb*b;
}
if(c==0)
sumc=0;
else
sumc=1;
for(;c>1;c--)
{
sumc=sumc*c;
}
if(suma+sumb+sumc==i)
printf("%d ",i);
}
}
结果是145
楼主认为可用的话 可以看看 你说有解释更好 我也初学 如果写的不好 见谅 (解释见下)
windboyzsj 2007-07-26
  • 打赏
  • 举报
回复
yj*=b;

=============
更正 y*=b;
windboyzsj 2007-07-26
  • 打赏
  • 举报
回复

int fun(int a,int b,int c)
{
int x=y=z=1;
for(;a>1;a--)
{
x*=a;
}
for(;b>1;b--)
{
yj*=b;
}
for(;z>1;z--)
{
z*=c;
}
return x+y+z;
}

int main()
{
int a=3;
int b=3;
int c=3;
int abc = fun(a,b,c);
}

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧