一个求1到1000数的阶乘和数 c!

tianyuuuu 2012-03-01 12:28:58
阶乘和数就是比如: 145为1!+4!+5!,那么145就是阶乘和数。编程题目就是求1到1000的阶乘和数,我的代码如下:
#include<stdio.h>
long jc(int x)
{
long s=1; int i,p;
for(i=1;i<=x;i++)
p*=i;
return(p);
}
main()
{
int i,j,v[2]={0},s=0;

for(j=1;j<1000;j++)
{
i=0;
while(j!=0)
{
v[i]=j%10;
j/=10;
i++;
}
s=jc(v[0])+jc(v[1])+jc(v[2]);
if(j==s) printf("%d ",j);
for(i=0;i<3;i++)
v[i]=0;
}

}
请指教!
...全文
838 39 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianyuuuu 2012-03-01
  • 打赏
  • 举报
回复
3楼的高手 具体怎么设计呀?
七擒关羽 2012-03-01
  • 打赏
  • 举报
回复

int ten_factorial()//求10以内数的所有的阶乘和
{
int i,j;
int temp_i = 0;
int temp_j = 1;
for(i = 1;i>10;i++)
{
for(j=1;j<i;j++)
temp_j = temp_j*j;
temp_i = temp_i + temp_j;
}
return temp_i;
}

int main()
{
int num = 1000;
int total = (1000/10)*ten_factorial();
return 0;
}
nice_cxf 2012-03-01
  • 打赏
  • 举报
回复
那有那么麻烦,分别算1!,2!直到n!大于1000为止大概也就1-66个数,分别取一个两个三个算一下是否满足就ok了,6因为6!=720也可以直接去掉,实际上就只有5个
tianyuuuu 2012-03-01
  • 打赏
  • 举报
回复
在VC6.0中 没反应
cbzjzsb123 2012-03-01
  • 打赏
  • 举报
回复
不错,上面高手不少的,呵呵
zmkkobe 2012-03-01
  • 打赏
  • 举报
回复
不错,上面高手不少的,呵呵
CatSmoking 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 tianyuuuu 的回复:]
一天只花2个小时的话?
[/Quote]

楼主出来解释下,是不是百位的阶乘+十位的阶乘+个位的阶乘这个意思?比如

145=1!+4!+5!合格
那么121=1! + 5!不合格?

否则没任何讨论的意义了。
qixing1115 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 catsmoking 的回复:]
引用 25 楼 qixing1115 的回复:
1:1
2:2
145:145
5760:5760
5761:5761
5762:5762
请按任意键继续. . .
1000以内的没几个,10000以内的还多两个

5!=120
6!=720
7!=5040

5!+6!+7!=5880

5760不管0的阶乘是多少,5760就已经不是了(除非0!=-120).
……
[/Quote]
忘了程序用的是三位数了,多了一位,不过思路是没错的
tianyuuuu 2012-03-01
  • 打赏
  • 举报
回复
一天只花2个小时的话?
tianyuuuu 2012-03-01
  • 打赏
  • 举报
回复
你们一天像这样难度的代码 能打几个呀?
tianyuuuu 2012-03-01
  • 打赏
  • 举报
回复
谢32楼的MM或兄弟!
没有蜡 2012-03-01
  • 打赏
  • 举报
回复
LZ 你的代码存在一下错误:
1.没有考虑到0的阶乘。
2.你在循环中修改了你的j值,并且还用修改了的j与s比较,并且导致死循环。
3.你的Jc函数也有问题
下面是我该写的,通过了编译 希望对你有帮助
#include<stdio.h>
long jc(int x)
{
int s=1; int i;
for(i=1;i<=x;i++)
s*=i;
return(s);
}
void main()
{
int i,j,v[3]={0},s=0;

for(j=1;j<1000;j++)
{
i=0;
int m=j;

while(m!=0)
{
v[i]=m%10;
m/=10;
i++;
}
if(v[2]!=0)
s=jc(v[2])+jc(v[1])+jc(v[0]);
else if(v[1]!=0)
s=jc(v[1])+jc(v[0]);
else
s=jc(v[0]);

if(j==s)
printf("%d\n ",j);

for(i=0;i<3;i++)
v[i]=0;
}
}
funywork 2012-03-01
  • 打赏
  • 举报
回复
求解释下3楼的思路,没看懂额
CatSmoking 2012-03-01
  • 打赏
  • 举报
回复
1,2,145,40585
CatSmoking 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 qixing1115 的回复:]
1:1
2:2
145:145
5760:5760
5761:5761
5762:5762
请按任意键继续. . .
1000以内的没几个,10000以内的还多两个
[/Quote]
5!=120
6!=720
7!=5040

5!+6!+7!=5880

5760不管0的阶乘是多少,5760就已经不是了(除非0!=-120).
结果就1,2,145。
  • 打赏
  • 举报
回复
继续非主流写法

int a[]={0,1,2,6,24,120,720},i=1,z=0;
for(;z=a[i&1]+a[i&2]+a[((i&4)>>2)*3]+a[((i&8)>>3)*4]+a[((i&16)>>4)*5]+a[((i&32)>>5)*6],printf("%5d\t",z),z=0,i++,!(i-1%8)?printf("\n"):0,i<63;);

CatSmoking 2012-03-01
  • 打赏
  • 举报
回复
没一个好好看题目的,怎么可能溢出呢。
最大的阶乘和数就是999 1088640
qixing1115 2012-03-01
  • 打赏
  • 举报
回复
1:1
2:2
145:145
5760:5760
5761:5761
5762:5762
请按任意键继续. . .
1000以内的没几个,10000以内的还多两个
qixing1115 2012-03-01
  • 打赏
  • 举报
回复
long jc(int x)
{
long s=1; int i,p;
if(x==0)
return 0;
p = 1;
for(i=1;i<=x;i++)
p*=i;
return(p);
}
int main()
{
int i,j,v[3]={0},s=0;

for(j=1;j<20;j++)
{
int k = j;
i=0;
while(k!=0)
{
v[i]=k%10;
k/=10;
i++;
}
s=jc(v[0])+jc(v[1])+jc(v[2]);
printf("%d:%d \n",j,s);
for(i=0;i<3;i++)
v[i]=0;
}

}

你的错误很多,自己对照着改吧,要不是你非要知道你的哪不对我真想给你重新写个
qixing1115 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 studycbc 的回复:]
C/C++ code

int ten_factorial()//求10以内数的所有的阶乘和
{
int i,j;
int temp_i = 0;
int temp_j = 1;
for(i = 1;i>10;i++)
{
for(j=1;j<i;j++)
temp_j = temp_j*j;
temp……
[/Quote]
三楼的思路就挺不错的
加载更多回复(18)

70,023

社区成员

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

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