长整数加法运算
时间: 2023-07-04 13:16:17 浏览: 185
长整数加法运算可以通过模拟手工计算的方式来实现。具体步骤如下:
1. 将两个长整数对齐,即在短的数前面补 0,使得两个数的位数相等。
2. 从低位开始,依次将两个数对应位上的数字相加,记得把前一位上的进位加上。
3. 如果相加的结果超过了 10,就要向高位进位。
4. 直到两个数的所有位都相加完毕,最终的结果就是两个数的和。
下面是一个 Python 代码实现长整数加法运算的例子:
```Python
def addStrings(num1: str, num2: str) -> str:
res = []
carry = 0
i = len(num1) - 1
j = len(num2) - 1
while i >= 0 or j >= 0:
n1 = int(num1[i]) if i >= 0 else 0
n2 = int(num2[j]) if j >= 0 else 0
temp_sum = n1 + n2 + carry
carry = temp_sum // 10
res.append(str(temp_sum % 10))
i -= 1
j -= 1
if carry:
res.append(str(carry))
return ''.join(res[::-1])
```
其中,num1 和 num2 分别表示两个长整数,返回值是它们的和。
相关问题
用c++语言实现长整数加法运算并且写出注释
下面是用 C++ 实现长整数加法运算的代码,同时添加了注释:
```C++
#include <iostream>
#include <string>
using namespace std;
string addStrings(string num1, string num2) {
string res; // 定义结果字符串
int carry = 0; // 定义进位,初值为 0
int i = num1.size() - 1, j = num2.size() - 1; // 分别从 num1 和 num2 的最低位开始加
while (i >= 0 || j >= 0) { // 只要有一方还没加完,就继续加
int n1 = i >= 0 ? num1[i] - '0' : 0; // 如果 num1 还没加完,就取出当前位的数字
int n2 = j >= 0 ? num2[j] - '0' : 0; // 如果 num2 还没加完,就取出当前位的数字
int temp_sum = n1 + n2 + carry; // 计算 num1 和 num2 当前位的和以及进位
carry = temp_sum / 10; // 计算新的进位
res.push_back(temp_sum % 10 + '0'); // 将当前位的结果加到结果字符串中
i--; // 继续处理 num1 的下一位
j--; // 继续处理 num2 的下一位
}
if (carry) { // 如果最高位有进位,就需要加上去
res.push_back('1');
}
reverse(res.begin(), res.end()); // 将结果字符串翻转过来
return res; // 返回结果
}
int main() {
string num1, num2;
cout << "请输入两个长整数:" << endl;
cin >> num1 >> num2;
string sum = addStrings(num1, num2);
cout << "它们的和是:" << sum << endl;
return 0;
}
```
这个算法的时间复杂度是 $O(n)$,其中 $n$ 是两个长整数中位数较长的那个数的位数。
应用线性表实现两个超长整数加法运算,用C语言实现
以下是一个C语言实现的例子。其中,LongInt是自定义的结构体类型,用来表示一个超长整数。该结构体类型包含一个char类型数组digits,数组元素用来存储整数各位数字,还包含一个int类型变量length,表示整数的有效位数。
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LENGTH 10001 // 数组最大长度
typedef struct LongInt {
char digits[MAX_LENGTH]; // 存储数字的数组
int length; // 数字的有效位数
} LongInt;
// 将字符串转换成LongInt类型
LongInt str2longint(char *str) {
LongInt num;
int len = strlen(str);
for (int i = 0; i < len; i++) {
num.digits[len-i-1] = str[i] - '0';
}
num.length = len;
return num;
}
// 将LongInt类型转换成字符串
char *longint2str(LongInt num) {
char *str = (char*)malloc(sizeof(char)*(num.length+1));
for (int i = 0; i < num.length; i++) {
str[i] = num.digits[num.length-i-1] + '0';
}
str[num.length] = '\0';
return str;
}
// 高精度加法
LongInt add(LongInt num1, LongInt num2) {
LongInt result = {.length = 0};
int carry = 0; // 进位标志
int len = (num1.length > num2.length) ? num1.length : num2.length;
for (int i = 0; i < len; i++) {
int sum = num1.digits[i] + num2.digits[i] + carry;
carry = sum / 10;
result.digits[i] = sum % 10;
result.length++;
}
if (carry > 0) { // 处理最高位的进位
result.digits[result.length++] = carry;
}
return result;
}
int main() {
char str1[MAX_LENGTH], str2[MAX_LENGTH];
printf("请输入第一个整数:");
scanf("%s", str1);
printf("请输入第二个整数:");
scanf("%s", str2);
LongInt num1 = str2longint(str1);
LongInt num2 = str2longint(str2);
LongInt result = add(num1, num2);
char *str_result = longint2str(result);
printf("结果为:%s\n", str_result);
free(str_result);
return 0;
}
```
这个程序首先读入两个字符串作为超长整数,调用str2longint函数将字符串转换成LongInt类型的数字,然后调用add函数进行加法运算,最后将结果转换成字符串并输出。其中,str2longint函数和longint2str函数用来将字符串和LongInt类型的数字互相转换,add函数用来进行高精度加法运算。
相关推荐
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)