2.已知A、B分别是m、n位(位数为10-30的随机正整数)的随机正整数,编写程序给出这两个正整数相加的结果。如:A=47858628539074,B= 212821064467,C=A+B=48071449603541 用c语言表示
时间: 2023-05-30 10:04:56 浏览: 98
C语言程序设计-将两个两位数的正整数a、b合并形成一个整数放在c中;合并的方式是:将a数的十位和个位数依次放在c数的百位
5星 · 资源好评率100%
#include <stdio.h>
#include <string.h>
#define MAX_LEN 30
int main() {
char A[MAX_LEN + 1], B[MAX_LEN + 1], C[MAX_LEN + 2];
int lenA, lenB, lenC;
// 读入 A 和 B
scanf("%s%s", A, B);
lenA = strlen(A);
lenB = strlen(B);
// 对齐 A 和 B,使得 A 的位数不小于 B 的位数
if (lenA < lenB) {
char tmp[MAX_LEN + 1];
strcpy(tmp, A);
strcpy(A, B);
strcpy(B, tmp);
lenA ^= lenB ^= lenA ^= lenB;
}
// 从低位到高位逐位相加
int carry = 0;
for (int i = 0; i < lenA; i++) {
int a = A[lenA - 1 - i] - '0';
int b = i < lenB ? B[lenB - 1 - i] - '0' : 0;
int sum = a + b + carry;
C[i] = sum % 10 + '0';
carry = sum / 10;
}
// 最高位可能有进位
if (carry > 0) {
C[lenA] = carry + '0';
lenC = lenA + 1;
} else {
lenC = lenA;
}
C[lenC] = '\0';
// 翻转字符串得到 C
for (int i = 0; i < lenC / 2; i++) {
C[i] ^= C[lenC - 1 - i] ^= C[i] ^= C[lenC - 1 - i];
}
printf("%s\n", C);
return 0;
}
阅读全文