一、高精度減法代碼
高精度減法是指兩個大數相減,其中至少有一個數字長度超過 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-tw/n/258292.html
微信掃一掃
支付寶掃一掃