C 两个大数相乘

C 两个大数相乘,c,largenumber,multiplication,C,Largenumber,Multiplication,我有一个问题,需要两个大数字相乘。我想把第一个数字A,B乘以(B是第二个数字)。我做了两个大数字相加的算法。所以我想这会管用的。问题是,做这个算法需要很长时间吗,多次向自身添加数字 问题是,做这个算法需要很长时间吗,多次向自身添加数字 对。这是一种非常缓慢的数字相乘方法,当你把b加到a的时候,你需要把b加到a的加法中。为了更好的性能和一个相当简单的算法,考虑这样的移位和添加过程(乘以A和B,将结果放在Q): q← 0,我← 0 如果2i>a则返回q 如果a&(1≪i)那么q← q+(b&l

我有一个问题,需要两个大数字相乘。我想把第一个数字A,B乘以(B是第二个数字)。我做了两个大数字相加的算法。所以我想这会管用的。问题是,做这个算法需要很长时间吗,多次向自身添加数字

问题是,做这个算法需要很长时间吗,多次向自身添加数字

对。这是一种非常缓慢的数字相乘方法,当你把b加到a的时候,你需要把b加到a的加法中。为了更好的性能和一个相当简单的算法,考虑这样的移位和添加过程(乘以A和B,将结果放在Q):

  • q← 0,我← 0
  • 如果2i>a则返回q
  • 如果a&(1≪i)那么q← q+(b≪i)
  • 我← i+1
  • 转到2
  • 这类问题的快速算法有,和

    问题是,做这个算法需要很长时间吗,多次向自身添加数字

    对。这是一种非常缓慢的数字相乘方法,当你把b加到a的时候,你需要把b加到a的加法中。为了更好的性能和一个相当简单的算法,考虑这样的移位和添加过程(乘以A和B,将结果放在Q):

  • q← 0,我← 0
  • 如果2i>a则返回q
  • 如果a&(1≪i)那么q← q+(b≪i)
  • 我← i+1
  • 转到2
  • 这类问题的快速算法是,和。

    检查此算法:

    long long multiply(long long a, long long b)
    {
        if(a < b)
            swap(a, b);
    
        long long c = 0;
    
        for(int i = 0; (1ll << i) <= b; ++i)
        {
            if(((b >> i) & 1ll) == 1ll)
            {
                c += a << i;
            }
        }
    
        return c;
    }
    
    long-long乘法(long-long a,long-long b)
    {
    if(a
    
    long long multiply(long long a, long long b)
    {
        if(a < b)
            swap(a, b);
    
        long long c = 0;
    
        for(int i = 0; (1ll << i) <= b; ++i)
        {
            if(((b >> i) & 1ll) == 1ll)
            {
                c += a << i;
            }
        }
    
        return c;
    }
    
    long-long乘法(long-long a,long-long b)
    {
    if(a
    c+=a请展示您的工作/尝试……您想加法还是乘法?您的主题与您的描述中的不同。@etalon11他的问题清楚地表明,他想将乘法模拟为一系列加法。简单地将它们相乘有什么错?为什么必须重复地将它们相加?如果它们在相乘时溢出,它们将被忽略添加时也会溢出。谢谢erip,但这样做并没有真正的好处…请展示您的工作/尝试…您想添加还是乘法?您的主题与您的描述中的主题有所不同。@etalon11他的问题清楚地表明,他想将乘法模拟为一系列加法。简单的乘法有什么错正在删除它们?为什么必须重复添加它们?如果它们在乘法时溢出,则在添加时也会溢出。谢谢erip,但这样做并没有真正的好处…你从来没有增加过
    I
    @pat现在我做了。谢谢你提醒我这个疏忽。你从来没有增加过
    I
    @pat现在我做了。谢谢你提醒我这个疏忽。是
    (1@WeatherVane,是的,谢谢你,我的坏。代码更改了。这个代码不起作用:OP特别说他的数字太大,不能存储在任何整数类型中。@fuzzxl操作“+”和位运算符可以重载(例如)BigInteger类。我发布这个答案是为了展示一个简单的算法。C没有类或重载。是
    (1@WeatherVane,是的,谢谢你,我的错。代码更改。此代码不起作用:OP明确表示他的数字太大,无法存储在任何整数类型中。@FUZxxl运算“+”和位运算符可以重载(例如)BigInteger类。我发布这个答案是为了展示一个简单的算法思想。C没有类或重载。