| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2917 人关注过本帖
标题:1000的阶乘?
只看楼主 加入收藏
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
收藏
得分:0 
#define STRMAX 514
#define P 100000
main()
{
long t[STRMAX]={0},a,b,c,g=0,x,e,p=P;

  t[STRMAX-1]=1;
  for (e=1;e<=1000;e++)for(x=STRMAX-1;x>=0;c=t[x],c*=e,a=c/p,b=c%p,t[x]=b+g,g=a,x--);
  printf("%ld",t[0]);
  for(x=1;x<=STRMAX-1;printf("%.5ld",t[x]),x++);
  getch();
}
你这条程序只不过输出一大堆的数据。你敢保证你的计算结果就是100%正确?

生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-10-27 11:28
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
收藏
得分:0 
  是我弄错了。到了1000都还可以。我超过300后是因为的c盘命令符那里不能打印出全部。我就因为出了异常

生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-10-27 11:43
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
如果我没有记错的话 数组只可以放255个数,你这道题目用链表或者几个数组来做吧
为什么删我的贴?我好心提醒你你记错了,还要删我贴?请给个理由。 因为你当初并没有指出我错在边,只是发了个符号,所以我删了

c++/C + 汇编 = 天下无敌
2005-10-27 15:27
yuucyf
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-9-15
收藏
得分:0 

#include<iostream>
#include<stdlib.h>
using namespace std ;
int main()
{
int a[800] = {0} ;
int m = 0 ;
int n , b , t , w=0 ;
a[0]=a[1]=1 ;
for(int j=2 ; j<=1000 ; j++)
{
n = a[0] ;
for(int i=1 ; i<=n ; i++)
{
a[i] = a[i] * j + m ;
if(a[i] > 9999)
{
t = a[i] / 10000 ;
a[i] = a[i] % 10000 ;
m = t ;
if(i == n)
{
while(m > 9999)
{
t = a[i] / 10000 ;
a[i] = a[i] % 10000 ;
m = t ;
a[0]++ ;
}
if(m != 0)
{
i++ ;
a[i] = m ;
a[0]++ ;
m = 0 ;
}
}
}
else
m = 0 ;
}
}

for(int i=799 ; i>=1 ; i--)
if(a[i] > 0)
{
b = i ;
break ;
}
while(a[b])
{
w = w + 1 ;
a[b] = a[b] / 10 ;
}
cout << "1000的阶乘一共有" << (a[0]-1) * 4 + w << "位!" ;
cout << endl ;
for(int i=b-1 ; i>=1 ; i--)
{
if(a[i] > 999)
cout << a[i] ;
if(a[i] >= 100 && a[i] <= 999)
cout << "0" << a[i] ;
if(a[i] >= 10 && a[i] <= 99)
cout << "00" << a[i] ;
if(a[i] > 0 && a[i] <= 9)
cout << "000" << a[i] ;
if(a[i] == 0)
cout << "0000" ;
}
cout << endl ;
system("pause") ;
}


//1000! = 1 * 2 * 3 * 4 * ... * 1000
//两边取10的对数
//log(1000!) = log(1*2*3*4* ... * 1000)
// = log(1) + log(2) + log(3) + ... + log(1000)
//编个程序把右边算出来就可以了,注意用double来保存结果。
//log(1000!) = 2567.60
//把结果取整再加一,就得到1000!的位数为2568

//#include<stdio.h>
//#include<math.h>
//int main()
//{ double sum = 0.0;
// int i;
// for(i=1;i<=1000;++i)
// sum += log10(i);
// printf("%d\n",(int)sum + 1);
// return 0;
//}

2005-10-28 15:21
爱疯了
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-9-5
收藏
得分:0 
怎么都运行错误呀??????
2006-09-06 21:25
C_Student
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-9-13
收藏
得分:0 

第13楼的我在Dev C++ 运行没问题,正常运作.

2006-09-22 23:21
cedricporter
Rank: 1
等 级:新手上路
帖 子:49
专家分:3
注 册:2007-2-6
收藏
得分:0 

/////////////////////////////////////////////
// File Name: n!.cpp
/////////////////////////////////////////////

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
ofstream outf("out.txt");
long a[500001] = {0, 0};
long c, i, j, n, x;
c = 0;
a[1] = 1;
x =1 ;

cout << "Please input n:";
cin >> n;

////////////////////////////////////////////
// Main algorithm !!!!
////////////////////////////////////////////

for (i = 1; i <= n; i++)
{
for (j = 1; j <= x; j++)
{
a[j] *= i;
a[j] += c;
c = 0;
c = a[j]/10;
if (a[j]>= 10)
{
if (a[x] >= 10)
x++;
c = a[j] / 10;
a[j] %= 10;
}
}
}

////////////////////////////////////////////
// Output the answer
////////////////////////////////////////////

outf << n << "!=\n";
for(int k = x; k >= 1; k--)
outf << a[k];
outf << endl;

////////////////////////////////////////////
//system("pause");

return 0;
}


清脆的口琴聲﹏悠揚的旋律﹏然而︵每個音符︵?°都充滿了悲傷︵?°~↘
2007-02-21 20:43
无玩过界
Rank: 1
等 级:新手上路
威 望:2
帖 子:246
专家分:0
注 册:2007-2-20
收藏
得分:0 

没有反应


2007-02-21 20:50
liuminghui
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:2882
专家分:0
注 册:2007-1-26
收藏
得分:0 
那要定义为 long 吧?!!

海鸽 is My Lover!!
2007-03-07 13:57
快速回复:1000的阶乘?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017381 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved