由于整型数的位数有限,因此整型数不能满足大整数(超长整数)的运算要求 。大整数计算是利用字符串来表示大整数,即用字符串的一位字符表示大整数的一位数值,然后根据四则运算规则实现大整数的四则运算。
大数的结构
typedef struct bigint
{
char *num; //指向长整数数组(序号0中保存着最高位)
char sign; //符号(1表示正数,-1表示负数)
int digit; //保存该数的位数(实际位数)
}BIGINT, *pBIGINT;
加法运算
执行加法之前,先判断两数是同号相加还是异号相加,同号则执行加法运算,异号则执行减法运算。在加法运算中,首先将被操作的两个数对齐,然后从低位向高位逐渐相加,在对应位置相加时,要考虑是否有地位相加的进位。
实现代码:
首先将被加数中的内容复制到结果数组中,然后从低位逐渐加到结果中去,最后判断加数各位加完之后是否还有进位,如果有则要累加到高位中去。BigintTirm()用于整理大数,去掉前多余的0,并调整其位数
void BigIntAdd(pBIGINT num1,pBIGINT num2,pBIGINT result)
{
int i,carry;
carry=0; //清除进位
result->sign =num1->sign; //保存符号
//将被加数复制到结果数组中
for(i=0;i<num1->digit;i++)
result->num[i]=num1->num[i];
//num2中的数小,可能位数也少些
for(i=0;i<num2->digit;i++)