用C语言实现大整数减法#include <stdio.h> #include <string.h> #define MAX_LEN 1000 // 定义最大长度 int main() { char a[MAX_LEN + 1], b[MAX_LEN + 1]; int ans[MAX_LEN + 1]; // 定义字符串数组 int lena, lenb, lens, flag = 0; // lena为a的长度,lenb为b的长度,lens为结果的长度,flag为标志位 // 输入两个整数 scanf("%s %s", &a, &b); lena = strlen(a); lenb = strlen(b); // 分三种情况 if (lena < lenb || (lena == lenb && strcmp(a, b) < 0)) { char temp[MAX_LEN + 1]; strcpy(temp, a); strcpy(a, b); strcpy(b, temp); flag = 1; } lens = lena > lenb ? lena : lenb; int i = lena - 1, j = lenb - 1, k = lens - 1; int borrow = 0; // 定义借位变量 while (i >= 0 || j >= 0) { int x = i >= 0 ? a[i] - '0' : 0; int y = j >= 0 ? b[j] - '0' : 0; int z = x - y - borrow; if (z < 0) { z += 10; borrow = 1; } else { borrow = 0; } ans[k--] = z + '0'; i--; j--; } // 去除前导零 while (ans[lens - 1] == '0' && lens > 1) { lens--; } // 输出结果 if (flag) { printf("-"); } for (i = 0; i < lens; i++) { printf("%d", ans[i]); } printf("\n"); return 0; }中存在的问题
时间: 2024-02-14 09:32:39 浏览: 71
c++实现的任意大整数类,是c++新手练手的良好材料 定义可处理任意大的正整数类LongLongInt,用一个动态字符数组存放任
5星 · 资源好评率100%
这段代码实现了大整数减法,但存在以下几个问题:
1. 输入没有进行合法性检查,当输入非数字字符时会导致程序出错。
2. 没有检查输入的数字是否超过了最大长度 MAX_LEN,可能会导致程序出错。
3. 字符串数组 ans 没有初始化,可能会导致输出错误结果。
4. 在比较两个字符串大小时使用了 strcmp 函数,效率较低,可以使用逐位比较来实现。
5. 输出结果时使用了字符数组 ans,但最终结果可能需要超过 MAX_LEN 个数字字符,可能会导致输出错误结果。可以使用动态内存分配来解决这个问题。
阅读全文