一、高精度減法代碼
高精度減法是指兩個大數相減,其中至少有一個數字長度超過 long long 類型所能表示的上限。以下是一個高精度減法的 c++ 代碼示例:
#include <bits/stdc++.h> using namespace std; const int MAXN = 10010; int a[MAXN], b[MAXN], c[MAXN]; // a - b = c int lena, lenb, lenc; void print() { // 輸出結果 if (lenc == 0) printf("0"); for (int i = lenc - 1; i >= 0; i--) { printf("%d", c[i]); } printf("\n"); } bool cmp(int *a, int *b, int lena, int lenb) { if (lena != lenb) return lena = 0; i--) { if (a[i] != b[i]) return a[i] < b[i]; } return true; } void sub(int *a, int *b, int *c, int lena, int lenb) { int borrow = 0; for (int i = 0; i < lena; i++) { c[i] = a[i] - borrow - b[i]; if (c[i] 0 && c[lenc - 1] == 0) lenc--; } int main() { // 讀入兩個大數 string sa, sb; cin >> sa >> sb; lena = sa.length(); lenb = sb.length(); for (int i = 0; i < lena; i++) a[i] = sa[lena - i - 1] - '0'; for (int i = 0; i < lenb; i++) b[i] = sb[lenb - i - 1] - '0'; if (cmp(a, b, lena, lenb)) swap(a, b), swap(lena, lenb), printf("-"); lenc = lena; sub(a, b, c, lena, lenb); print(); return 0; }
二、c++高精度減法
高精度減法需要注意以下幾個問題:
1. 高精度減法需要將字符串轉化為數字數組,方便進行計算。
2. 減法操作中需要判斷被減數是否小於減數,以確定結果的正負。
3. 在計算的過程中,需要用一個借位值來判斷是否需要借位。
4. 計算結束後需要去掉前導 0。
三、選取高精度減法C語言
C 語言中實現高精度減法需要手動實現字符串轉數值和數值轉字符串,相對比 c++ 更加繁瑣。以下是高精度減法的 C 語言代碼示例:
#include <stdio.h> #include <string.h> #define MAXN 10010 int a[MAXN], b[MAXN], c[MAXN]; // a - b = c int lena, lenb, lenc; void print() { // 輸出結果 if (lenc == 0) printf("0"); for (int i = lenc - 1; i >= 0; i--) { printf("%d", c[i]); } printf("\n"); } bool cmp(int* a, int* b, int lena, int lenb) { if (lena != lenb) return lena = 0; i--) { if (a[i] != b[i]) return a[i] < b[i]; } return true; } void sub(int* a, int* b, int* c, int lena, int lenb) { int borrow = 0; for (int i = 0; i < lena; i++) { c[i] = a[i] - borrow - b[i]; if (c[i] 0 && c[lenc - 1] == 0) lenc--; } void str2int(char* str, int* x, int& len) { len = strlen(str); for (int i = 0; i = 0; i--) { str[pos++] = x[i] + '0'; } str[pos] = '\0'; } int main() { // 讀入兩個大數 char sa[MAXN], sb[MAXN]; scanf("%s%s", sa, sb); str2int(sa, a, lena); str2int(sb, b, lenb); if (cmp(a, b, lena, lenb)) { memcpy(c, b, sizeof(b)); memcpy(b, a, sizeof(a)); memcpy(a, c, sizeof(c)); int tmp = lenb; lenb = lena; lena = tmp; printf("-"); } lenc = lena; sub(a, b, c, lena, lenb); int2str(c, lenc, sa); printf("%s\n", sa); return 0; }
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/258292.html