大一c语言编程加减法,求用C编个大数加减法运算程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

只写过加法的,杭电的A + B Problem (II)(AC):

#include

#include

#include

#define N 3000

int main(void)

{

int n, i, j, k, p, q, a, b, t, up;

char s[N];

scanf("%d ", &n);

for (i = 0; i < n; i++) {

int sum[N] = {0};

printf("Case %d:\n", i + 1);

fgets(s, N, stdin);

for (t = q = strlen(s) - 2; isdigit(s[t]); t--)

;

for (p = t - 1, up = j = 0; p >= 0 || isdigit(s[q]);) {

a = p >= 0 ? s[p--] - '0' : 0;

b = isdigit(s[q]) ? s[q--] - '0' : 0;

t = a + b + up;

sum[j++] = t % 10;

up = t / 10;

}

if (up) sum[j] = up;

for (k = 0; isdigit(s[k]);) printf("%d", s[k++]-'0');

for (printf(" + "), k++; k < strlen(s) - 1;) printf("%d", s[k++]-'0');

for (printf(" = "), k = N-1; sum[k] == 0; k--) ;

for (; k >= 0; k--) printf("%d", sum[k]);

printf("\n");

if (i != n-1) printf("\n");

}

return 0;

}

供参考……减法应该类似……不难写出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的 C 语言实现无符号大数加、减运算的代码: ```c #include <stdio.h> #include <string.h> #define MAX_LEN 100 // 将字符串转换为大数 void str_to_num(char str[], int num[]) { int i, len; len = strlen(str); for (i = 0; i < len; i++) { num[i] = str[len - 1 - i] - '0'; } } // 将大数转换为字符串 void num_to_str(int num[], int len, char str[]) { int i; for (i = 0; i < len; i++) { str[i] = num[len - 1 - i] + '0'; } str[len] = '\0'; } // 大数加法 void add(int num1[], int len1, int num2[], int len2, int res[], int *res_len) { int i, carry = 0; *res_len = len1 > len2 ? len1 : len2; for (i = 0; i < *res_len; i++) { res[i] = num1[i] + num2[i] + carry; carry = res[i] / 10; res[i] %= 10; } if (carry > 0) { res[*res_len] = carry; (*res_len)++; } } // 大数减法 int sub(int num1[], int len1, int num2[], int len2, int res[], int *res_len) { int i, borrow = 0; *res_len = len1; for (i = 0; i < len1; i++) { res[i] = num1[i] - borrow - (i < len2 ? num2[i] : 0); if (res[i] < 0) { res[i] += 10; borrow = 1; } else { borrow = 0; } } while (*res_len > 1 && res[*res_len - 1] == 0) { (*res_len)--; } return borrow; } int main() { int num1[MAX_LEN], num2[MAX_LEN], res[MAX_LEN]; int len1, len2, res_len; char str1[MAX_LEN + 1], str2[MAX_LEN + 1], op; printf("请输入一个无符号大数和一个操作符(+ 或 -):\n"); scanf("%s %c %s", str1, &op, str2); str_to_num(str1, num1); str_to_num(str2, num2); len1 = strlen(str1); len2 = strlen(str2); if (op == '+') { add(num1, len1, num2, len2, res, &res_len); } else if (op == '-') { int borrow = sub(num1, len1, num2, len2, res, &res_len); if (borrow) { printf("Error: 结果为负数!\n"); return -1; } } else { printf("Error: 不支持的操作符!\n"); return -1; } char res_str[MAX_LEN + 1]; num_to_str(res, res_len, res_str); printf("结果为:%s\n", res_str); return 0; } ``` 这个程序包括了三个函数:`str_to_num`、`add` 和 `sub`。`str_to_num` 函数接受一个字符串和一个整型数组作为参数,将字符串转换为整型数组表示的大数。`add` 函数实现了大数加法,接受两个整型数组和它们的长度作为参数,将它们相加得到结果存储在第三个整型数组中。`sub` 函数实现了大数减法,接受两个整型数组和它们的长度作为参数,将第一个整型数组减去第二个整型数组得到结果存储在第三个整型数组中。 在 `main` 函数中,我们首先从用户输入中获取两个无符号大数和一个操作符。然后调用 `str_to_num` 函数将字符串转换为整型数组,调用 `add` 或 `sub` 函数计算结果,最后调用 `num_to_str` 函数将结果转换为字符串并输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值