1000之内整数的阶乘

#include <stdio.h>
#include <math.h>
/*#include "stdafx.h"*/
struct num
{
 int nu[2570];
 int bit;
};

int calBit(int n)
{
 int bit;
 double tem=0;
 int i;
 for(i=0;i<n;i++ )
 {
  tem=tem+log10(i+1);
 }
 bit=(int)tem + 1;
 return bit;
}
void cheBit(struct num *t, int bitB)
{
 int m=bitB;
 while(t->nu[m-1]==0)
 {
  m--;
 }
 t->bit=m;
}
void carry(struct num *temp,int bitC)
{
 do
 {
  temp->nu[bitC+1]+=(temp->nu[bitC]/10);
  temp->nu[bitC]=(temp->nu[bitC])%10;
/*  cheBit(temp, 2568);
  if(bitC+1>=temp->bit)
  {
   temp->bit=bitC++;
  }
 if(temp.nu[bitC+1]>=10)
// {
//  carry(temp,bitC+1);
// }*/
 }while(temp->nu[++bitC]>=10);
}
void main()
{
 int n,i,j,k;
/* int bit,bit_res=0,bit_a=1,bit_b=1;*/
 struct num a,b,res;
 int t;
 int bit;
 scanf("%d",&n);
 for(i=0;i<2570;i++)
 {
  a.nu[i]=0;
  b.nu[i]=0;
  res.nu[i]=0;
 }
 bit=calBit(n);
/* int a[bit],b[bit],res[bit];*/
 a.bit=1;
 b.bit=1;

 res.bit=1;
 a.nu[0]=1;
 b.nu[0]=2;
 for(k=1;k<n;k++)
 {
  for(i=0;i<b.bit;i++)
  {
   for (j=0;j<a.bit;j++)
   {
    t=a.nu[j]*b.nu[i];
    res.nu[j+i]+=(t%10);
    if(res.nu[j+i]>=10)
    {
     carry(&res,j+i);
    }

    res.nu[j+i+1]+=(t/10);
    if(res.nu[j+i+1]>=10)
    {
     carry(&res,j+i+1);
    }
   }
  }
  cheBit(&res, bit);
  for(j=0;j<res.bit;j++)
  {
   a.nu[j]=res.nu[j];
   res.nu[j]=0;
  }
  a.bit=res.bit;
  b.nu[0]++;
  if(b.nu[0]>=10)
  {
   carry(&b,0);
  }
  cheBit(&b, 5);
 }
 for(i=bit-1;i>=0;i--)
 {
  printf("%d",a.nu[i]);
 }
 printf("/n%d b.bit=%d/n",b.nu[1],b.bit);
 printf("a.bit=%d/n",a.bit);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值