C 两个大数相乘
我有一个问题,需要两个大数字相乘。我想把第一个数字A,B乘以(B是第二个数字)。我做了两个大数字相加的算法。所以我想这会管用的。问题是,做这个算法需要很长时间吗,多次向自身添加数字 问题是,做这个算法需要很长时间吗,多次向自身添加数字 对。这是一种非常缓慢的数字相乘方法,当你把b加到a的时候,你需要把b加到a的加法中。为了更好的性能和一个相当简单的算法,考虑这样的移位和添加过程(乘以A和B,将结果放在Q):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
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没有类或重载。