大数乘法(C语言、数组模拟)

之前写过用java解决大数问题    链接   java大数

然后c的解法比较普遍的简单的就是模拟乘法竖式运算

参考聚聚的博客  也比较好理解  写一个竖式乘法过程对照来一遍就好了

直接贴代码了  题目是51nod1027   大数乘法

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+7;
char s1[maxn],s2[maxn];
int a[maxn],b[maxn],c[maxn*2];
int main(){
    while(~scanf("%s%s",s1,s2)){
        if(s1[0]=='0'||s2[0]=='0'){printf("0\n");continue;}
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        int l1=strlen(s1),l2=strlen(s2);
        for(int i=0;i<l1;i++)a[i]=s1[l1-i-1]-'0';
        for(int i=0;i<l2;i++)b[i]=s2[l2-i-1]-'0';
        for(int i=0;i<l1;i++){
            for(int j=0;j<l2;j++){
                c[i+j]=a[i]*b[j]+c[i+j];//按位进行乘法
                c[i+j+1]=c[i+j+1]+c[i+j]/10;//处理进位
                c[i+j]=c[i+j]%10;
            }
        }
        int flag=l1+l2;
        while(!c[flag])flag--;
        for(int i=flag;i>=0;i--)printf("%d",c[i]);
        printf("\n");
    }
    return 0;
}

 

    原文作者:大整数乘法问题
    原文地址: https://blog.csdn.net/holly_Z_P_F/article/details/83049941
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞