文章

18

粉丝

0

获赞

3

访问

10.8k

头像
大整数加法 题解:自用笔记(C语言)
P1474 武汉大学2018年机试题
发布于2024年3月22日 17:28
阅读数 478

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void largeplus(char* s1, char* s2) {
	int len1 = strlen(s1);
	int len2 = strlen(s2);//确定位数
	int len = len1 > len2 ? len1 : len2;//取位数多的
	int* arr1 = (int*)malloc(sizeof(int)* (len+1));
	int* arr2 = (int*)malloc(sizeof(int) * (len+1));//考虑到两个位数相同的数据相加以后位数进一,如99+99

	//将字符转为数字,所在位没有数据用0代替,保证两个数组是等长的方便后续相加,如999+1 则为9990+0001
	for (int i = len; i >=0; i--) {
		arr1[i] = 0;
		if (len1> 0)
			arr1[i] = s1[len1 - 1] - '0';
		len1--;
	}
	for (int i = len; i >= 0; i--) {
		arr2[i] = 0;
		if(len2>0)
			arr2[i] = s2[len2 - 1]-'0';
		len2--;
	}

	//运算过程,利用k记录进行了多少次计算
	int k = 0;
	for (int i = len; i >= 0; i--) {
		if (arr1[i] == 0 && arr2[i] == 0 && i == 0)//末尾都是补位的0则结束计算
			break;
		int x = arr1[i]+arr2[i];
		if (x >= 10) {//进位:大于等于10,当前位取余覆盖,邻位加一
			arr1[i] = x % 10;
			if(i>=1)//没有邻位,取余覆盖即可
			arr1[i - 1]++;
		}
		else
			arr1[i] = x;
		k++;...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发