求一个“大整数算法”,高手指点下!!!
需要一个实现十进制数的大整数算法,小弟刚开始学习,有点懵懂,请高手给个弯着完整的算法程序,最好带点注释的,谢谢了!!!
[解决办法]
void add(int *a, int *b, int *c)
{ int i, carry = 0;
for(i = N - 1; i > = 0; i--)
{
c[i] = a[i] + b[i] + carry;
if(c[i] < 10000)
carry = 0;
else {
// 位
c[i] = c[i] - 10000;
carry = 1; }
}
}
void sub(int *a, int *b, int *c) {
int i, borrow = 0;
for(i = N - 1; i > = 0; i--) {
c[i] = a[i] - b[i] - borrow;
if(c[i] > = 0)
borrow = 0;
else {
// 借位
c[i] = c[i] + 10000;
borrow = 1;
}
}
}
void mul(int *a, int b, int *c)
{ // b 乘 int i, tmp, carry = 0;
for(i = N - 1; i > =0; i--)
{ tmp = a[i] * b + carry;
c[i] = tmp % 10000;
carry = tmp / 10000;
}
}
[解决办法]
::没时间帮你写程序,提供个基本思路:这个需要用到”分治法“。如果不清楚“分治法”,可以去参考任何一本关于算法的书,上面都应该有介绍。
[解决办法]
当超过语言内置的数据类型的表达范围时,只能自己定义数据结构,如果知道数据的长度范围用数组简单一些,否则用动态如:链表。加减乘比较简单用人工竖式模拟计算就可能了,除法自己找找相应的算法。去年复试时,笔试就有这样一道题。