超长正整数的加法,设计一个程序实现两个任意长的整数求和运算
时间: 2023-04-28 11:04:20 浏览: 108
可以使用字符串来表示超长正整数,然后按照加法的规则逐位相加,注意进位即可。具体实现可以使用循环,从低位到高位逐位相加,同时记录进位,最后将结果反转即可得到正确的结果。需要注意的是,输入的字符串可能包含前导零,需要在计算时去掉这些前导零。
相关问题
超长正整数的加法,设计一个程序实现两个任意长的整数求和运算,使用c语言运算
思路:
1. 读入两个超长正整数,可以使用字符串读入,将字符串转换为整数数组。
2. 对两个整数数组进行加法运算,从低位到高位依次相加,每一位的和取模10得到该位的结果,进位则在下一位加上1。
3. 将相加后的结果转换为字符串输出。
代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000 // 定义最大长度
int main() {
char str1[MAX_LEN + 1], str2[MAX_LEN + 1]; // 定义字符数组
int num1[MAX_LEN + 1], num2[MAX_LEN + 1], result[MAX_LEN + 1]; // 定义整数数组
int len1, len2, len, carry = 0; // len1和len2分别为两个整数的长度,len为相加后的长度,carry为进位数
int i, j; // 循环计数器
// 读入两个超长正整数
printf("请输入第一个整数:");
scanf("%s", str1);
printf("请输入第二个整数:");
scanf("%s", str2);
len1 = strlen(str1);
len2 = strlen(str2);
// 将字符数组转换为整数数组
for (i = 0; i < len1; i++) {
num1[i] = str1[len1 - i - 1] - '0';
}
for (i = 0; i < len2; i++) {
num2[i] = str2[len2 - i - 1] - '0';
}
// 对两个整数数组进行加法运算
len = len1 > len2 ? len1 : len2; // 取两个数中较大的长度
for (i = 0; i < len; i++) {
result[i] = num1[i] + num2[i] + carry; // 相加并加上进位
carry = result[i] / 10; // 计算进位
result[i] %= 10; // 取模得到该位的结果
}
if (carry > 0) { // 如果最高位有进位
result[len++] = carry; // 将进位加到最高位
}
// 将整数数组转换为字符串
printf("两数之和为:");
for (i = len - 1; i >= 0; i--) {
printf("%d", result[i]);
}
printf("\n");
return 0;
}
```
用c语言单向链表超长正整数的加法,设计一个程序实现两个任意长的整数求和运算
好的,以下是一个用 C 语言实现的单向链表超长正整数加法的程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node {
int digit;
struct Node *next;
} Node;
Node *create_node(int digit) {
Node *node = (Node *) malloc(sizeof(Node));
node->digit = digit;
node->next = NULL;
return node;
}
Node *add_digit(Node *head, int digit) {
Node *node = create_node(digit);
node->next = head;
return node;
}
Node *add_long_int(Node *num1, Node *num2) {
Node *result = NULL;
int carry = 0;
while (num1 != NULL || num2 != NULL) {
int sum = carry;
if (num1 != NULL) {
sum += num1->digit;
num1 = num1->next;
}
if (num2 != NULL) {
sum += num2->digit;
num2 = num2->next;
}
carry = sum / 10;
result = add_digit(result, sum % 10);
}
if (carry > 0) {
result = add_digit(result, carry);
}
return result;
}
void print_long_int(Node *num) {
while (num != NULL) {
printf("%d", num->digit);
num = num->next;
}
printf("\n");
}
int main() {
char str1[1000], str2[1000];
printf("请输入两个任意长的整数:\n");
scanf("%s%s", str1, str2);
int len1 = strlen(str1), len2 = strlen(str2);
Node *num1 = NULL, *num2 = NULL;
for (int i = len1 - 1; i >= 0; i--) {
num1 = add_digit(num1, str1[i] - '0');
}
for (int i = len2 - 1; i >= 0; i--) {
num2 = add_digit(num2, str2[i] - '0');
}
Node *result = add_long_int(num1, num2);
printf("结果为:\n");
print_long_int(result);
return 0;
}
```
这个程序可以读入两个任意长的整数,用单向链表存储,然后实现加法运算,最后输出结果。
阅读全文