一、高精度减法代码
高精度减法是指两个大数相减,其中至少有一个数字长度超过 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/n/258292.html
微信扫一扫
支付宝扫一扫