C语言顺序表实现随机生成50位以内的2个大数(位数可以不一样)并实现加法,请使用函数进行设计。提示:可设计如下函数: (1)随机生成50位以内的大整数的函数:CreateRandomBigInt; (2)使用顺序表实现大整数相加的函数:AddBigInt;
时间: 2024-05-10 12:21:11 浏览: 110
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_SIZE 50
// 随机生成50位以内的大整数
void CreateRandomBigInt(int a[], int n)
{
srand(time(NULL)); // 初始化随机数种子
for (int i = 0; i < n; i++)
{
a[i] = rand() % 10; // 生成0~9的随机数
}
}
// 顺序表实现大整数相加
void AddBigInt(int a[], int b[], int c[], int n, int m)
{
int carry = 0; // 进位标志
int i, j, k;
for (i = n - 1, j = m - 1, k = 0; i >= 0 && j >= 0; i--, j--, k++)
{
c[k] = (a[i] + b[j] + carry) % 10; // 相加并加上进位
carry = (a[i] + b[j] + carry) / 10; // 计算新的进位标志
}
while (i >= 0) // 处理a中剩余的数位
{
c[k++] = (a[i] + carry) % 10;
carry = (a[i--] + carry) / 10;
}
while (j >= 0) // 处理b中剩余的数位
{
c[k++] = (b[j] + carry) % 10;
carry = (b[j--] + carry) / 10;
}
if (carry > 0) // 如果最高位有进位,则需增加一位
{
c[k++] = carry;
}
for (i = 0, j = k - 1; i < j; i++, j--) // 将c中的数位翻转
{
int temp = c[i];
c[i] = c[j];
c[j] = temp;
}
}
int main()
{
int a[MAX_SIZE], b[MAX_SIZE], c[MAX_SIZE + 1]; // c最高位可能有进位,因此需要开辟MAX_SIZE+1个空间
int n, m;
CreateRandomBigInt(a, MAX_SIZE); // 随机生成a
n = rand() % MAX_SIZE + 1; // 随机生成n
CreateRandomBigInt(b, n); // 随机生成b
m = rand() % n + 1; // 随机生成m
printf("a = ");
for (int i = 0; i < MAX_SIZE; i++)
{
printf("%d", a[i]);
}
printf("\n");
printf("b = ");
for (int i = 0; i < n; i++)
{
printf("%d", b[i]);
}
printf("\n");
AddBigInt(a, b, c, MAX_SIZE, n); // 计算c=a+b
printf("c = ");
for (int i = 0; i < MAX_SIZE + 1; i++)
{
printf("%d", c[i]);
}
printf("\n");
return 0;
}
```
阅读全文