Loading... 【算法分析】 类似加法,可以用竖式求减法。在做减法运算时,需要注意的是:被减数必须比减数大,同时需要处理错位。高精度减法的参考程序: ```C #include<iostream> #include<cstdio> #include<cstring> using namespace std; int main(void) { int a[256], b[256], c[256], lena, lenb, lenc, i; char n[256], n1[256], n2[256]; memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); memset(c, 0, sizeof(c)); printf("Input minuend:"); gets_s(n1); //输入被减数 printf("Input subtrahend:"); gets_s(n2); //输入减数 if (strlen(n1) < strlen(n2) || (strlen(n1) == strlen(n2) && strcmp(n1, n2) < 0)) { //处理被减数和减数,交换被减数和减数 strcpy_s(n, n1); //将n1数组的值完全赋值给n数组 strcpy_s(n1, n2); strcpy_s(n2, n); cout << '-'; //交换了减数和被减数,结果为负数 } lena = strlen(n1); lenb = strlen(n2); for (i = 0; i <= lena - 1; i++) a[lena - i] = int(n1[i] - '0');//被减数放入a数组 for (i = 0; i <= lenb - 1; i++) b[lenb - i] = int(n2[i] - '0');//减数放入b数组 i = 1; while (i < lena || i < lenb) { if (a[i] < b[i]) { a[i] += 10; //不够减,那么向高位借1 当10 a[i + 1]--; } c[i] = a[i] - b[i]; //对应位相减 i++; } lenc = i; while ((c[lenc] == 0) && (lenc > 1)) lenc--; for (i = lenc; i >= 1; i--) cout << c[i]; cout << endl; return 0; } ``` 最后修改:2021 年 09 月 12 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏