关于大整数相加与相减

大整数相加核心:

void bigadd_methods(char *a, char *b, char *c) {    //确保数组a长于数组b
	int A = strlen(a), B = strlen(b), add, k = 0;
	for (int i = 0; i<A; i++) {
		if (B - i>0&&k)         add = a[A - 1 - i] + b[B - 1 - i] - '0' + 1;
		else if (B - i>0&&!k)   add = a[A - 1 - i] + b[B - 1 - i] - '0';
		else if (B - i<=0&& k) add = a[A - 1 - i] + 1;
		else               add = a[A - 1 - i];
		if (add>'9') {
			k = 1;
			c[i] = add - 10;
		}
		else {
			k = 0;
			c[i] = add;
		}
	}
	if (k) { c[A] = '1'; c[A + 1] = '\0'; }
	else c[A] = '\0';                                          //c数组要逆序输出
}

---------------------------------------------------------------------------------------------------------


大整数相减核心:

void bigsubtract_methods(char *a, char *b, char *c) {    //确保数组a长于数组b
	int A = strlen(a), B = strlen(b), add, k = 0;
	for (int i = 0; i<A; i++) {
		if (B - i>0&&k)         add = a[A - 1 - i] - b[B - 1 - i] + '0' - 1;
		else if (B - i>0&&!k)   add = a[A - 1 - i] - b[B - 1 - i] + '0';
		else if (B - i<=0&& k) add = a[A - 1 - i] - 1;
		else               add = a[A - 1 - i];
		if (add<'0') {
			k = 1;
			c[i] = add + 10;
		}
		else {
			k = 0;
			c[i] = add;
		}
	}
	 c[A] = '\0';                                              //c数组要逆序输出
}

输出时如果是负数记得加个’-’号

输出是不单要逆序还要注意前导0的问题。输出代码如下:

int kk = 0;
		for (int i = strlen(c) - 1; i >= 0; i--) {
		   if (kk) printf("%c", c[i]);
		   else if (c[i]) { printf("%c", c[i]); kk = 1; }
	    }
if (!kk) printf("0");


有更好的算法或者优化请评论,虚心学习。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值