关于用加法实现大数的阶乘

Lersh 2001-02-08 07:22:00
上次我提问如何计算大数的阶乘,根据Tice(孤笑)提供的思路;5!=4!+4!+4!+4!+4!,4!=3!+3!+3!+3!,3!=2!+2!+2!,2!=1!+1!。
  按此思路,我编了一个程序,从0到6都正确,7不对,8又对了,以后都不正确!我找不出原因,望大家相助!为了方便,给出DOS下的源程序。

#include "stdlib.h"
#include "math.h"
main()
{
 int times,size,Number,j,i,k;
 float length=0;
 char * result,* temp;
 printf("\nPlease input the Number:");
 scanf("%d",&Number);
 for(i=1;i<=Number;i++)
 length+=log10(i);//计算长度
 size=(int)length+1;
 result=malloc(size*sizeof(char));//分配空间
 printf("%d\n",size);
 temp=malloc(size*sizeof(char));
 for(i=0;i<size;i++)
  result[i]=0;
 result[0]=1;
 length=0;
 for(i=0;i<size;i++)
   temp[i]=result[i];
//以下是核心算法
 for(times=1;times<=Number;times++)
 {
  for(i=1;i<=times-1;i++)
    length+=log10(i);
  for(i=1;i<=times-1;i++)
  {
   if(i==1)
    for(k=0;k<=(int)length;k++)
   temp[k]=result[k];
  for(j=0;j<=(int)length;j++)
   {
    result[j]+=temp[j];
    if(result[j]>=10)
    {
     result[j+1]+=result[j]/10;
     result[j]%=10;
    }
   }
  }
 }
 for(k=size-1;k>=0;k--)
 printf("%c",result[k]+'0');
 getch();
}

...全文
225 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rice 2001-02-15
  • 打赏
  • 举报
回复
补充:
对于大数可以建立一个大数类型,
struct big{
int * val;
int size;
};
在建立相应的加法和输出。
rice 2001-02-15
  • 打赏
  • 举报
回复
我的另一种实现。
一下是计算10!。
#include <stdio.h>
#define N 11
void main(){
int i,j;
int val[N];

val[0]=val[1]=1;
for(i=2;i<N;i++){
val[i]=0;
for(j=0;j<i;j++){
val[i]+=val[i-1];
}
}

for(i=0;i<N;i++){
printf("[%2d]%d\t",i,val[i]);
}
}
yoursoft 2001-02-12
  • 打赏
  • 举报
回复
Lersh正确.
可以将
for(times=1;times<=Number;times++)
{
for(i = 1; i <= times - 1; i++)
lenght += long10(i);
更改为:
for(times=1;times<=Number;times++)
{
lenght += long10(times);
Lersh 2001-02-10
  • 打赏
  • 举报
回复
找到错误了:
//以下是核心算法
 for(times=1;times<=Number;times++)
 {
  for(i=1;i<=times-1;i++)
    length+=log10(i);
没有对length进行初始化!居然犯这么低级的错误!
青润 2001-02-09
  • 打赏
  • 举报
回复
我看到它的这种算法思想应该是正确的,你编译的结果不正确也许有其他原因,如编译器的设置和数值的有效位数。等等吧。
Lersh 2001-02-09
  • 打赏
  • 举报
回复
可能是TC2.0的问题,我用BCB5.0编译后,7和9的答案正确了,但10以后还是不对,请教大家,错在哪里。谢谢了。

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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