大数乘法(非FFT)

本文介绍了一种使用C++实现大数乘法的方法,通过定义一个特殊的数据结构来处理超过常规整型变量范围的大数运算问题。该方法利用字符串处理和长整型变量(longlong)避免了溢出,并提供了输出格式调整以确保正确展示计算结果。
部署运行你感兴趣的模型镜像

注意点:
1.两个数相乘的时候,要用long long 防止溢出
2.最后输出的时候,位数不够前面补0,用的是 %.9d 反正阔以这样用(っ•̀ω•́)っ✎⁾⁾ 我爱学习

#include"iostream"
#include"algorithm"
#include"string.h"
using namespace std;
const int maxn=2e5+5;
const int MOD=1e9;
typedef long long  LL;
struct Big
{
    int n;
    int a[maxn];
};
Big c2n(char *s)
{
    int len=strlen(s);
    Big t;
    t.n=len/9;
    memset(t.a,0,sizeof(t.a));
    int tp;
    for(int i=0,j=len-1;i<len;i++,j--)
    {
        if(i%9==0)tp=1;
        t.a[i/9]+=(s[j]-'0')*tp;
        tp*=10;
    };
    return t;
}
Big operator*(Big a,Big b)
{
    Big res;
    res.n=a.n+b.n+2;
    memset(res.a,0,sizeof(res));
    for(int i=0;i<=a.n;i++)
    for(int j=0;j<=b.n;j++)
    {
        LL tp=(LL)a.a[i]*b.a[j];
        tp+=res.a[i+j];
        res.a[i+j+1]+=tp/MOD;
        res.a[i+j]=tp%MOD;
    }

    while(res.a[res.n]==0)res.n--;

    return res;
}
void print(Big res)
{
    cout<<res.a[res.n];
    for(int i=res.n-1;i>=0;i--)printf("%.9d",res.a[i]); 
    cout<<"\n";
}
int main()
{
    char a[maxn],b[maxn];
    while(cin>>a>>b)
    {
        Big aa=c2n(a),bb=c2n(b);
        Big res=aa*bb;
        print(res);
    }
}

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值