大数乘法(二)

乘法运算过程模拟法

首先获取输入的乘数(a)与被乘数(b)字符串,按一般乘法运算过程,先是a的最后一位数字与b的最后一位数字相乘,接着a中用于相乘的数下标递减,直到a中所有数字与b最后一位都相乘过,保存结果后再递减b中的用于相乘的数字的下标,循环下去,直到b中每一位数都与a所有数相乘完。
在这个过程中,怎么遍历出填放结果的位置和处理进位是关键。
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<conio.h>

    int main(){
        char c;
        char *a=(char*)malloc(sizeof(char)*1000);
        char *b=(char*)malloc(sizeof(char)*1000);
        memset(a,'\0',1000);    memset(b,'\0',1000);
        scanf("%s",b);     scanf("%s",a);       
        int lena=strlen(a); int lenb=strlen(b);
        int len=lena+lenb;
        char *result=(char *)malloc(sizeof(char)*(len+1));
        //多开辟一个字节用于存放'\0'便于输出
        memset(result,'0',len);
        result[len]='\0';   
        for(int i=lena-1;i>=0;i--){
            int t=0,p=0,q=0,temp=0;
            int j;
            for(j=lenb-1;j>=0;j--){
                p=(b[j]-'0')*(a[i]-'0');
                temp=result[i+j+1]-'0'+p%10+t;
                result[i+j+1]=temp%10+'0';
                t=temp/10+p/10;//填放在结果里发生的进位+运算过程中的进位
            }
            if(t){
                result[i+j+1]=result[i+j+1]+t;
            } 
        }
        //第一个位置可能没有填充进位,所以如果第一个字符为'0'就不输出
        if(result[0]=='0')puts(result+1);
        else puts(result);

        free(a);
        free(b);
        free(result);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲敲代码、落灯花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值