任意长整数加减c语言
时间: 2023-07-13 15:05:28 浏览: 88
C语言中没有内置的任意长整数类型,因此需要使用字符串来表示任意长整数,然后进行加减运算。
以下是一个简单的实现:
```c
#include <stdio.h>
#include <string.h>
// 将字符串表示的数字转换为整数数组,高位在前
void str2num(char *str, int *num) {
int len = strlen(str);
for (int i = 0; i < len; i++) {
num[i] = str[len-1-i] - '0';
}
}
// 将整数数组转换为字符串表示,高位在前
void num2str(int *num, int len, char *str) {
int i;
for (i = len-1; i >= 0 && num[i] == 0; i--); // 去掉高位的0
if (i < 0) {
str[0] = '0';
str[1] = '\0';
return;
}
int j = 0;
for (; i >= 0; i--, j++) {
str[j] = num[i] + '0';
}
str[j] = '\0';
}
// 任意长整数相加,结果保存在a中,返回新的长度
int add(int *a, int lena, int *b, int lenb) {
int len = lena > lenb ? lena : lenb;
for (int i = 0; i < len; i++) {
a[i] += b[i];
if (a[i] >= 10) {
a[i] -= 10;
a[i+1]++;
}
}
if (a[len] > 0) len++; // 最高位进位
return len;
}
// 任意长整数相减,结果保存在a中,返回新的长度
int sub(int *a, int lena, int *b, int lenb) {
int len = lena;
for (int i = 0; i < lenb; i++) {
a[i] -= b[i];
if (a[i] < 0) {
a[i] += 10;
a[i+1]--;
}
}
while (len > 1 && a[len-1] == 0) len--; // 去掉高位的0
return len;
}
int main() {
char str1[100], str2[100];
scanf("%s%s", str1, str2);
int num1[100], num2[100], len1, len2;
memset(num1, 0, sizeof(num1));
memset(num2, 0, sizeof(num2));
str2num(str1, num1);
str2num(str2, num2);
len1 = strlen(str1);
len2 = strlen(str2);
int num3[100], len3;
memset(num3, 0, sizeof(num3));
len3 = add(num3, len1, num1, len2);
printf("%s + %s = %s\n", str1, str2, num2str(num3, len3, str1));
len3 = sub(num3, len1, num2, len2);
printf("%s - %s = %s\n", str1, str2, num2str(num3, len3, str1));
return 0;
}
```
该程序首先将输入的两个字符串转换为整数数组,并通过 `add` 和 `sub` 函数实现任意长整数的加减运算,最后再将结果转换为字符串输出。
阅读全文