求一份计算大数阶乘的代码 从1!一直算到40!不需要相加 输出的时候 是1! = %d\n 2! = %d\n …… 40! = %d\n 每一位数用一个数组元素存储 跪求代码 鼓捣一天没鼓捣出来 请用C代码 求大神指教
原理求教 怎样才可以用一个数组元素存储一位大数数字?
追答就是模拟手工算法
这个是一个元素一位的算法:
#include
#define N 10000
int main()
{
static long int r[N]={1};
int i,j;
int k=0,l=0;
for(i=1;il)
l=j;
r[j++]+=k%10;
k=k/10;
}
j=l;
for(;j>=0;j--)
{
printf("%d",r[j]);
}
printf("\n");
}
return 0;
}
正解是40! = 815915283247987734345611269596115894272000000000 代码运行结果不对的
追答代码运行结果能保证你前15位或者16位正确,因为double型数据的有效范围是15到16位有效数字,其他位上的就不敢保证了,这也是为什么c语言中说不是所有的浮点型数据都能准确无误的输出,而此处之所以用double型,是因为你求的阶乘太大,其他类型的,恐怕表示不了
追问如果阶乘小也不用来知道提问了 书上要求是一个数组元素储存阶乘结果的一位数 不太懂 浮点型可以的话我不用纠结一下午了
追答啥叫存储阶乘结果的一位数?另外,如果你的计算机可行,就把类型换成双长整型,long long的试试,不过俺的计算机不能用这个类型
追问编程计算并输出1~40之间的所有数的阶乘。提示:用一个50维的数组存储一个大数(n!),没一个数组元素存储大数中的一位数字。书上原题 不懂怎么分别存储大数中的一位数字 看了好多代码都没懂 不追问了 百度hi吧
要求就是一个元素存储一位数 没办法
追答前面的方法是一个元素存储一位数。
正解是40! = 815915283247987734345611269596115894272000000000 代码运行结果不对的