大数乘法模板

该博客介绍了一种用于计算两个大数相乘的算法模板,通过模拟乘法运算过程,将输入的字符串形式的大数转换为数组并进行计算,最终得到乘积。程序使用了C++语言,包括 memset 函数初始化数组,以及遍历字符串逆序存储数值等步骤,通过双重循环进行逐位乘法和进位操作,最后输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
两个非常大的数相乘
模拟乘法运算
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<stack>
#include<cmath>
using namespace std;


#define MAX_N 221  
int a1[MAX_N],a2[MAX_N];  
char s1[MAX_N],s2[MAX_N];  
int p[MAX_N*2];  
int main()  
{  
    gets(s1);  
    gets(s2);  
    int i,j;  
    
    
    int len1=strlen(s1);  
    //将数组里的内容变为0 
    memset(a1,0,sizeof(a1));  
    memset(a2,0,sizeof(a2));  
    memset(p,0,sizeof(p));  
    
    j=0;  
    for(i=len1-1; i>=0; i--)  //用数组倒着记录字符串里的数据 
    {  
        a1[j++]=s1[i]-'0';  
    }  
    j=0;  
    int len2=strlen(s2);  
    for(i=len2-1; i>=0; i--)  
    {  
        a2[j++]=s2[i]-'0';  
    }  
    
    for(i=0; i<len1; i++)  
    {  
        for(j=0; j<len2; j++)  
        {  
            p[i+j] += a1[i]*a2[j];//模拟乘法  可以自己在草稿纸上写乘法然后运算看看是否满足这个规律 
        }  
    }  
    
    
    for(i=0; i<MAX_N*2; i++)  //进位 
    {  
        if(p[i]>=10)  
        {  
            p[i+1]+=p[i]/10;  
            p[i]%=10;  
        }  
    }  
    
    for(i=MAX_N*2-1; i>=0; i--)  //找到第一个非零点 
    {  
        if(p[i])  
        break;  
    }  
    
    for(int k=i; k>=0; k--)  //从后往前输出 
    {  
        printf("%d",p[k]);  
    }  
    printf("\n");  
    return 0;  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值