高精度整数加法

高精度整数加法

问题描述:在计算机中,由于处理器位宽限制,只能处理有限精度的十进制整数加减法,比如在32位宽处理器计算机中,参与运算的操作数和结果必须在-231~231-1之间。如果需要进行更大范围的十进制整数加法,需要使用特殊的方式实现,比如使用字符串保存操作数和结果,采取逐位运算的方式。如下:
9876543210 + 1234567890 =?
让字符串 num1 = "9876543210",字符串 num2 = "1234567890",结果保存在字符串result中。要求编程实现上述高精度的十进制加法。

 #include <stdio.h> #include <string.h> #include <stdlib.h> void add_big(const char *num1, const char * num2, char *result, int len) { char *p1 = num1 + strlen(num1) - 1; char *p2 = num2 + strlen(num2) - 1; char *r = result + len; int carry = 0; result[len+1] = '/0'; while (p1>=num1 && p2>=num2) { int tmp = (*p1-'0')+(*p2-'0')+carry; if (tmp>=10) { carry = 1; tmp = tmp - 10; *r = tmp + '0'; } else { carry = 0; *r = tmp + '0'; } r--; p1--; p2--; } while (p1>=num1) { int tmp = *p1-'0'+carry; if (tmp>=10) { carry = 1; tmp = tmp - 10; *r = tmp + '0'; } else { carry = 0; *r = tmp + '0'; } r--; p1--; } while (p2>=num2) { int tmp = *p2-'0'+carry; if (tmp>=10) { carry = 1; tmp = tmp - 10; *r = tmp + '0'; } else { carry = 0; *r = tmp + '0'; } r--; p2--; } if(carry==1) *r = '1'; //这儿是新加的。 else *r = '0'; } int main() { char *result; char *num1 = "99999999999999"; char *num2 = "99999999999999"; int len = 0; int num1_len = strlen(num1); int num2_len = strlen(num2); if (num1_len > num2_len) len = num1_len; else len = num2_len; result = (char *)malloc(len+2); memset(result, '0', len+2); if (result!=NULL) { char *p = result-1; add_big( num1, num2, result, len); while (*(++p)=='0'); printf("%s/n", p); } return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值