将这两个线性表/数组相加得到一个的新的线性表
题目
输入数据创建两个非空线性表/数组来代表两个正整数,线性表/数组中的每个结点只存储一位数字。实现一种算法,将这两个线性表/数组相加得到一个的新的线性表,并将该线性表/数组输出。
思路
- 创建两个数组;
- 对应位数相加,循环次数为max(x,y);
- 设置四个数组,a数组,b数组,t数组(表示进位),sum数组;
- 最后将相加得到的数组倒序输出。
代码
#include <stdio.h>
#define LIST_INIT_SIZE 100
int main() {
int a[LIST_INIT_SIZE] = { 0 }, b[LIST_INIT_SIZE] = { 0 }, sum[LIST_INIT_SIZE] = { 0 }, t[LIST_INIT_SIZE] = { 0 };
int i,k;
printf("输入线性表1的长度:");
int x;
scanf_s("%d", &x);
for (i = x - 1; i >= 0; i--)
scanf_s("%d", &a[i]);
printf("输入线性表2的长度:");
int y;
scanf_s("%d", &y);
for (i = y- 1; i >= 0; i--)
scanf_s("%d", &b[i]);
if (x <y)
{
k = x;
x = y;
y = k;
}
for (i = 0; i <x; i++)
{
sum[i] = a[i] + b[i] + t[i];
t[i + 1] = sum[i] / 10;
sum[i] = sum[i] % 10;
}
if (t[x] > 0)
{
sum[x] = 1;
for (i = x; i >= 0; i--)
printf("%d ", sum[i]);
}
else
for (i =x - 1; i >= 0; i--)
printf("%d ", sum[i]);
return 0;
}