void reverse(int* arr, int left, int right) {
while (left < right) {
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int* addToArrayForm(int* A, int ASize, int K, int* returnSize){
//先取到最高位
int tmp = K;
int knum = 0;
while (tmp != 0) {
knum++;
tmp /= 10;
}
//开空间 , 考虑最高位的进位 多给一位
int newAszie = ASize > knum ? ASize + 1 : knum + 1;
int* newArray = (int*)malloc(newAszie * sizeof(int));
//模拟加法运算 , 从低位开始
//低位先放在前面 , 最后给一个反转即可
int i = 0;
int idx = ASize - 1;
int step = 0;//保存进位
while (idx >= 0 || K > 0) {
//当前位的加法
newArray[i] = step;
if (idx >= 0)
newArray[i] += A[idx];
if (K > 0)
newArray[i] += K % 10;
//更新进位
if (newArray[i] >= 10) {
//如果大于10 保留个位 并且给step一个进位
newArray[i] -= 10;
step = 1;
}else {
step = 0;
}
//继续下一位的运算
i++;
idx--;
K /= 10;
}
//判断最高位是否需要进位
if (step == 1) {
newArray[i] = 1;
i++;
}
//反转数组
reverse(newArray, 0, i - 1);
*returnSize = i;
return newArray;
}
数组形式的整数加法
最新推荐文章于 2022-12-05 00:13:06 发布