| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2917 人关注过本帖
标题:1000的阶乘?
取消只看楼主 加入收藏
yuucyf
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-9-15
收藏
 问题点数:0 回复次数:1 
1000的阶乘?
因为结果产生的数超过的系统定义的长度,所以要变通!!! 我用一个大数组(如数组a[1000])的各个元素来表示结果的一位数,其中a[0]存放当前的结果的位数!!!比如:结果为123456......,(一共70位),那么a[0]=70,a[70]=1, a[69]=2,a[68]=3,a[67]=4......!!!!! 但是我的程序有点问题,哪位帮帮看一下,看那里出现问题!!! (可以用比较小的数试试),我对程序从头用多个实例走了好多遍,都没有问题,但是运行起来就有问题!!!实在找不出!!!! 希望大家帮忙!!谢谢了!!! 代码: #include<iostream> #include<stdlib.h> using namespace std ; int main() { int a[1000]={0} ; //先定义足够大的数组容纳1000阶剩的数 a[0]=a[1]=1 ; //a[0]为当前的位数 int m=0 , t, n , b=0 , l ; //m为低位向高位的进位 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] > 9) { t = a[i] / 10 ; a[i] = a[i] % 10 ; m = t ; if(i = a[0]) //当到最高位时,则要进行相应的处理! { l = i ; while(m > 9) { l++ ; t = m / 10 ; a[l] = m % 10 ; m = t ; a[0]++ ; } if(m > 0) { l++; a[l] = m ; a[0]++ ; m = 0 ; } } } else m = 0 ; } } cout << "1000的阶乘结果一共需要" << a[0] << "位" << endl ; for(int i=999 ; i>=1 ; i--) //因为1000的阶乘没有1000位,那么前面的都是零,所以就从不为零处输出 { if(a[i] != 0 && b==0) { for(int j=i ; j>=1 ; j--) cout << a[i] ; b = 1 ; } } system("pause") ; }
搜索更多相关主题的帖子: 阶乘 定义 系统 
2005-10-26 22:54
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
快速回复:1000的阶乘?
数据加载中...
 
   



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

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