C语言实现大数运算

由于整型数的位数有限,因此整型数不能满足大整数(超长整数)的运算要求 。大整数计算是利用字符串来表示大整数,即用字符串的一位字符表示大整数的一位数值,然后根据四则运算规则实现大整数的四则运算。

大数的结构

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++)               
  
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值