有沒有更好的乘法演算法 ?
我有查一下 ...FFT 真心看不懂 ~"~
總覺得我寫的效能很低
struct BigNumber
{
int array[size+size] = {0}; // 一個欄位存一個數字 為了把答案放進陣列 所以 size * 2
int length; // 位數
//bool sign; // 正負號
};
// 進位
void carry(BigNumber *a)
{
int i=0;
while(a->array[i] || i<=a->length)
{
if(a->array[i] > 9)
{
a->array[i+1] += a->array[i]/10 ;
a->array[i] %= 10;
}
i++;
}
a->length = i;
}
// 大數乘法
BigNumber mul(BigNumber a, BigNumber b)
{
BigNumber c;
int k;
c.length = max(a.length,b.length) ;
for (int i = 0; i < a.length; ++i)
{
k = i;
for (int j = 0; j < b.length; ++j)
c.array[k++] += a.array[i] * b.array[j];
}
carry(&c);
return c;
}
有沒有更好的乘法演算法 ?
我有查一下 ...FFT 真心看不懂 ~"~
總覺得我寫的效能很低
struct BigNumber
{
int array[size+size] = {0}; // 一個欄位存一個數字 為了把答案放進陣列 所以 size * 2
int length; // 位數
//bool sign; // 正負號
};
// 進位
void carry(BigNumber *a)
{
int i=0;
while(a->array[i] || i<=a->length)
{
if(a->array[i] > 9)
{
a->array[i+1] += a->array[i]/10 ;
a->array[i] %= 10;
}
i++;
}
a->length = i;
}
// 大數乘法
BigNumber mul(BigNumber a, BigNumber b)
{
BigNumber c;
int k;
c.length = max(a.length,b.length) ;
for (int i = 0; i < a.length; ++i)
{
k = i;
for (int j = 0; j < b.length; ++j)
c.array[k++] += a.array[i] * b.array[j];
}
carry(&c);
return c;
}