算法与数据结构_1:大数乘法

核心是利用数组存储大数的每一位,乘数依次乘以数组的每一位,最后做规范化处理

以下是计算1000的阶乘的源代码

int iArr[10000];

void init(){
    iArr[9999]=1;
    for(int i=0;i<9999;i++)
        iArr[i]=0;
}
void caculateArr(int m){    
    for(int i=0;i<10000;i++){
            if(iArr[i]==0)
                continue;
            iArr[i]*=m;
        }
}

void formatArr(){    
     int ii=0;
     for(int i=9999;i>=0;i--){
         if(iArr[i]<10)
             continue;
         else{
            ii=i;
            do{
                 iArr[ii-1]+=iArr[ii]/10;
                 iArr[ii]%=10;
                 ii--;
             }while(iArr[ii]>=10);
             i=ii;
         }
     }
}

void scanArr(int i){
    printf("%d ",i);
    int tag=0;
    for(i=0;i<10000;i++){
        if(iArr[i]==0&&tag==0)
            continue;
        tag=1;
        printf("%d",iArr[i]);
    }
    printf("\n");
}

void Print_Factorial ( const int N ){
    if((N<0)|(N>1000))
        printf("Invalid input");
    else if(N==0)
        printf("1");
    else{
        init();
        int i=1;
        while(i>0&&i<=N){
            caculateArr(i);
            formatArr();
            //scanArr(i);
            i++;
        }
        int tag=0;
        for(i=0;i<10000;i++){
            if(iArr[i]==0&&tag==0)
                continue;
            tag=1;
            printf("%d",iArr[i]);
        }
        printf("\n");
    }
}

void main(){

        Print_Factorial(1000);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值