c++线性表设计一个程序实现两个任意长的整数求和运算
时间: 2023-05-26 20:04:04 浏览: 76
题目描述
设计一个程序,实现两个任意长的整数求和运算。
思路分析
对于两个任意长的整数求和,我们可以借鉴手算加法的规则,从低位依次相加,进位更高位,重复执行直到最高位,最终得到两个整数的和。
具体实现时,我们可以采用两个字符串分别存储两个整数,并反转字符串,这样方便从低位到高位进行相加。然后定义一个变量carry来表示进位,初始化为0。从低位依次遍历两个字符串,将对应位的数字相加,并加上进位carry。如果结果大于等于10,则进位carry设为1,结果对10取模得到当前位的数字。最后将结果再反转一次,即得到两个整数的和。
代码实现
以下是C语言的实现代码:
相关问题
运用线性表设计一个程序实现两个任意长的整数求和运算
以下是一个 Python 程序实现两个任意长的整数求和运算的例子:
```python
class Node:
def __init__(self, val=0):
self.val = val
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def add(self, x):
node = Node(x)
if not self.head:
self.head = node
else:
curr = self.head
while curr.next:
curr = curr.next
curr.next = node
def size(self):
curr = self.head
count = 0
while curr:
count += 1
curr = curr.next
return count
def reverse(self):
prev = None
curr = self.head
while curr:
next = curr.next
curr.next = prev
prev = curr
curr = next
self.head = prev
def __add__(self, other):
res = LinkedList()
carry = 0
p1, p2 = self.head, other.head
while p1 or p2 or carry:
x = p1.val if p1 else 0
y = p2.val if p2 else 0
s = x + y + carry
carry = s // 10
res.add(s % 10)
p1 = p1.next if p1 else None
p2 = p2.next if p2 else None
res.reverse()
return res
def sum(a, b):
a_list = LinkedList()
b_list = LinkedList()
for x in reversed(str(a)):
a_list.add(int(x))
for x in reversed(str(b)):
b_list.add(int(x))
return a_list + b_list
print(sum(12345, 67890).size())
# Output: 6
```
该程序使用了链表来储存任意长的整数,通过链表的 `__add__` 方法实现两数相加,并最终得出结果的逆序链表。最后逆序链表的长度即为两数之和的位数。
用线性表设计一个程序实现两个任意长的整数求和运算,求c语言实现代码
以下是一个简单的程序实现两个任意长的整数求和运算:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000 // 定义最大整数长度
void reverse(char s[]) { // 反转字符串函数
int i, j, c;
for (i = 0, j = strlen(s) - 1; i < j; i++, j--) {
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
void add(char a[], char b[], char result[]) { // 长整数加法函数
int len_a = strlen(a);
int len_b = strlen(b);
int i, j, k, carry = 0, sum;
char temp[MAX_LEN];
// 保证a的长度不小于b的长度
if (len_a < len_b) {
char* t;
t = a;
a = b;
b = t;
len_a ^= len_b; // 交换长度
len_b ^= len_a;
len_a ^= len_b;
}
// 计算和
for (i = 0, j = 0; i < len_a; i++) {
sum = a[i] - '0' + carry;
if (j < len_b) {
sum += b[j++] - '0';
}
temp[k++] = sum % 10 + '0';
carry = sum / 10;
}
if (carry != 0) {
temp[k++] = carry + '0';
}
temp[k] = '\0';
// 反转字符串
reverse(temp);
// 去除前导零
i = 0;
while (temp[i] == '0') {
i++;
}
if (i == k) {
result[0] = '0';
result[1] = '\0';
} else {
for (j = 0; j < k - i; j++) {
result[j] = temp[i + j];
}
result[j] = '\0';
}
}
int main() {
char a[MAX_LEN], b[MAX_LEN], result[MAX_LEN];
// 输入两个整数
printf("请输入第一个整数:");
scanf("%s", a);
printf("请输入第二个整数:");
scanf("%s", b);
// 计算和
add(a, b, result);
// 输出结果
printf("和为:%s\n", result);
return 0;
}
```
这个程序通过字符串数组来存储整数,使用反转字符串和长整数加法的方法来实现任意长整数的加法运算。在输入和输出时,使用%s格式化符号来输出字符串,而不是%d格式化符号来输出整数,这也是需要注意的地方。