100!有多难

wangjian1987 2008-05-22 05:29:32
高手帮我调下啊(不过不要改了我的模型啊)
include <stdio.h>
main(){
int i,j,k,m,n,p,a[1000]={1};
system("cls"); //清屏
printf("please input the number:\n");
do{
k=scanf("%d",&m);
if(k&&m>0)
break;
scanf("%c",&m);
system("cls");
printf("pleae input a right number:\n");
}while(1);
for(j=1;j<m+1;j++){
for(i=0;;i++)
if(a[i]==0) //选出数组中不为零元素的位子
break;
p=i;
for(i=0;i<p;i++){
a[i]*=j; //依次将数组中的不为零的元素与j相乘
a[i]%=10;
n=a[i]/10;
k=i+1;
while(n>0){
a[k++]=n%10+a[k]; //数组中每一个元素都化为其自身和前一位元素进位来的数之和
n/=10;
}
}
}
printf("%d!=",m);
for(i=k-1;i>=0;i--)
printf("%d",a[i]);
getch(); //挂屏
}
...全文
279 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangjian1987 2008-05-24
  • 打赏
  • 举报
回复
sujita
我的思想是一个还没有但是即将溢出的数如果再乘以某个数那其很可能会溢出了
但是如果我把这个较大的数拆开来(用m%10;m/=10;来实现)分别放在一个数组中(可以定义a[100],这样a数组就可以装下一个100位的数了),在分别将这个数组中的每一个元素与要成的数相乘,最后进位。
进位:
比如说123344是a[7]中存放的数据,用123344%10,得4放在a[7]中,123344/10,再将12334%10,得另外一个4,再将这个4放在a[8],依次类推:3,3,2,1分别放在a[9],a[10],a[11],a[12]中。算完了a[7]再来算a[8]。
如果说a[8]在没有进位之前是m,那进位之后a[8]因为原来得m加a[7],a[6]......a[0]的进位数(当然那些数要足够大才可以进位到a[8],甚至是
a[9],a[10].最后依次输出a[i]
wangjian1987 2008-05-24
  • 打赏
  • 举报
回复
arong1234 ,谢谢了
wangjian1987 2008-05-24
  • 打赏
  • 举报
回复
谢谢你啊,不过我还是喜欢用自己的方法,你可以帮我调下程序吗
bo.cui 2008-05-24
  • 打赏
  • 举报
回复
我还以为要做100的阶乘次运算那~
xushengcn 2008-05-23
  • 打赏
  • 举报
回复
怕溢出要用大数的
kojie_chen 2008-05-23
  • 打赏
  • 举报
回复
大数大智慧
wangjian1987 2008-05-23
  • 打赏
  • 举报
回复
既然你算出了100!,那你可不可以帮我调下我那程序
wangjian1987 2008-05-23
  • 打赏
  • 举报
回复
当然了,写的出100!自然写得出1000!,不过我怕数组不够啊,不知c++中可以定义多大的数组
arong1234 2008-05-23
  • 打赏
  • 举报
回复
10000! << 10000的10000次方
后者才40000位10进制整数,也就是你至多要40000个元素的数组就可以了,这么小的数组,C++没问题的


[Quote=引用 12 楼 wangjian1987 的回复:]
既然你算出了100!,那你可不可以帮我调下我那程序
[/Quote]
bysdy 2008-05-23
  • 打赏
  • 举报
回复
用数组吧
从网上找的~~~嘿嘿,以前写了好几遍了,懒的再写了~~

#include<stdio.h>
#define SIZE 8000
#define DS 7998
unsigned x[SIZE],n,p,i,j,t;
int main(void)
{
while(scanf("%d",&n)!=EOF)
{
p=DS; x[DS]=1; x[DS+1]=0;
for(i=1;i<=n;i++)
{
p--; x[p]=0; p--; x[p]=0;
for(j=DS;j>p;j--)
{
x[j]*=i; t=j+1;
x[j]+=x[t]/100000;
x[t]%=100000;
}
while(!x[p]) p++;
}
printf("%u",x[p]); p++;
for(;p<SIZE-1;p++)
printf("%05u",x[p]);
printf("\n");
}
return 0;
}
wbyhzh1111 2008-05-23
  • 打赏
  • 举报
回复
[ubb
100!
/ubb]
languagec 2008-05-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 akirya 的回复:]
10000!的我也写过.
[/Quote]

引用错了
languagec 2008-05-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wangjian1987 的回复:]
除了最后一个挂屏和我不一样外,你更本就没有改我的程序啊
[/Quote]

10000! 和10000000! 都没什么区别
leeldy 2008-05-23
  • 打赏
  • 举报
回复
其实我们可以使用线性链表~~~
只是随着内存的利用效率会随着数的增大变得越来越低
Soulic 2008-05-23
  • 打赏
  • 举报
回复
学习~
sujita 2008-05-23
  • 打赏
  • 举报
回复
可以具体说一下为什么吗?谢谢啦
wangjian1987 2008-05-23
  • 打赏
  • 举报
回复
用数组就不可以解决吗
wangjian1987 2008-05-23
  • 打赏
  • 举报
回复
你写的是什么啊,我只学了c,其他的都不会啊
wangjian1987 2008-05-23
  • 打赏
  • 举报
回复
用数组可以解决这个问题的,我想到了一个模型,不过没有调出程序,你可以帮我调下吗
fallening 2008-05-22
  • 打赏
  • 举报
回复
100!=93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697
920827223758251185210916864000000000000000000000000
加载更多回复(5)

69,364

社区成员

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

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