2.已知A、B分别是m、n位(位数为10-30的随机正整数)的随机正整数,编写程序给出这两个正整数相加的结果。如:A=47858628539074,B= 212821064467,C=A+B=48071449603541 用c语言表示
时间: 2023-05-30 11:04:54 浏览: 108
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_DIGITS 30
int main() {
int m, n, i;
long long A = 0, B = 0, C = 0;
srand(time(NULL)); // 设置随机数种子为当前时间
// 生成 A 和 B
m = rand() % (MAX_DIGITS - 9) + 10; // 生成 10 到 MAX_DIGITS 之间的随机数作为 A 的位数
n = rand() % (MAX_DIGITS - 9) + 10; // 生成 10 到 MAX_DIGITS 之间的随机数作为 B 的位数
printf("A 和 B 的位数分别为 %d 和 %d\n", m, n);
for (i = 0; i < m; i++) {
A = A * 10 + rand() % 10; // 生成 A 的每一位
}
for (i = 0; i < n; i++) {
B = B * 10 + rand() % 10; // 生成 B 的每一位
}
printf("A = %lld, B = %lld\n", A, B);
// 计算 A + B
long long carry = 0; // 进位
for (i = 0; i < MAX_DIGITS; i++) {
long long sum = carry; // 加上进位
if (i < m) {
sum += A % 10;
A /= 10;
}
if (i < n) {
sum += B % 10;
B /= 10;
}
C = C * 10 + sum % 10; // 将个位数加到结果中
carry = sum / 10; // 计算进位
}
// 去掉前导零
while (C % 10 == 0 && C > 0) {
C /= 10;
}
printf("A + B = %lld\n", C);
return 0;
}
```