高精度算法(加、减、乘、除、阶乘和)​-高精度乘法

时间:2025-04-20 07:20:56
#include<bits/stdc++.h>
using namespace std;
#define debug(a) cout<<a<<" "

const int N=1e5+100; // 定义一个较大的数组大小,用于存储大整数

string s1,s2; // 用于输入两个字符串形式的大整数
int a[N],b[N],c[N],ans,ma; // a 和 b 存储两个大整数的每一位数字,c 存储结果,ans 用于进位,ma 记录较大数的位数

int main()
{
    cin>>s1>>s2; // 输入两个大整数(以字符串形式)
    
    int j=1,k=1;
    // 将字符串 s1 的每一位数字从低位到高位存入数组 a
    for(int i=s1.size()-1;i>=0;i--) a[j++]=s1[i]-'0';
    // 将字符串 s2 的每一位数字从低位到高位存入数组 b
    for(int i=s2.size()-1;i>=0;i--) b[k++]=s2[i]-'0';
    
    // 获取两个大整数的最大长度
    ma=max(s1.size(),s2.size());
    
    // 模拟竖式加法,逐位相加并处理进位
    for(int i=1;i<=ma;i++)
    {
        ans+=a[i]+b[i]; // 当前位相加,并加上上一位的进位
        c[i]=ans%10; // 当前位的结果是相加后的个位数
        ans/=10; // 更新进位值
    }
    
    // 如果最高位仍有进位,则需要额外增加一位
    if(ans) c[++ma]=ans;
    
    // 从高位到低位输出结果
    for(int i=ma;i>=1;i--)
        cout<<c[i];
    
    return 0;
}