文章
18
粉丝
0
获赞
3
访问
10.8k
#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++;...
登录后发布评论
暂无评论,来抢沙发