有谁知道100的阶乘怎么算?
最近,有人问我这个问题,发现用TUB C++,没有办法运算,因为这个数值超过了解10的120次方.希望能有人可以求解.
回复 #1 qinzhenhua 的帖子
哎~~我是初学者~不懂哦 阶乘~~都不知道什么意思,数学太差 和朋友一起出去聚餐,花去 214 思明论坛!下次努力哦!……这个没做过,倒是在计算超长整数相加的时候是有个方法是用链表存,一个结点存4位,符合我国的表示法,还有就是string模拟,希望能给你启示 你参与思明论坛的广告设计得到 430 思明论坛的佣金!
下次努力哦!……用数组方法,一个数组存一个数总会够大了吧 用string模拟11111111111 #include<iostream>
int main()
{
using namespace std;
cout<<"----------ren----------"<<endl;
int i;
double m;
m=1.0;
i=100;
for(i;i>=1;i--)
{
m=m*i;
}
cout<<m<<endl;
char aoo;
cin>>aoo;
return 0;
}
双精浮点数就OK了~ 双精度太长会变成科学记数法,如果不要科学记数法呢 不好意思,小偷又光顾你家,带走了你 10% 的财产!(人民政府再次提醒大家有钱要存银行)
下次努力哦!……难道cout<<m/1000000<<m%1000000;这样??? 上面用单精试下:hug: 不是,是能不能像有人用string模拟笔算实现超长整数加减程除,我只会用链表做加减,但是链表可以动态分配所以理论上可以实现任何长度的整数相加 #include <iostream.h>
#include <conio.h>
#include <malloc.h>
const int N = 1000;
void next(int a[],int n)
{
if(n==1 || n==0)
{
a = 1;
a = 1;
return;
}
int k = a;
int *b = (int *)malloc(sizeof(int) * (k+1));
int temp = 0;
int c = 0;
for(int i=1;i<=k;i++)
{
b = a;
}
for(i=1;i<n;i++)
{
temp = 0;
c = 0;
for(int j=1;j<=k;j++)
{
temp = (j<=a?a+b:a) + c;
c = temp / 10;
a = temp % 10;
}
if(c>0)
{
a[++k] = c;
}
}
free(b);
a = k;
}
void write(int *a, int k)
{
cout << k << "! = ";
for(int i=a;i>0;i--)
{
cout << a;
}
cout << endl;
}
void main()
{
clrscr();
int a;
int n;
cout << "Enter the number n:";
cin >> n;
if(n<0)
{
cout << "Error!" << endl;
return;
}
for(int k=0; k<=n; k++)
{
next(a,k);
}
write(a,n);
}
使用数组存放各个数字
使用递推法计算
例如:知道5!,6!=6个5!相加
[ 本帖最后由 wutugu 于 2007-1-22 21:13 编辑 ] 今天发放了上月的奖金 1028 思明论坛!
下次努力哦!……用STRING型的数组好一点
页:
[1]