欢迎光临散文网 会员登陆 & 注册

高精度算法(减法)

2023-02-28 21:54 作者:听个安  | 我要投稿

#include <bits/stdc++.h>

using namespace std;


char s1[10086], s2[10086], s3[10086];

int a[10086], b[10086], c[10086];

int flag = 0;

int u, v;


bool qwe(char s1[], char s2[]) {

u = strlen(s1);

v = strlen(s2);

//判断两个数的长度是否相等

if (u != v)

//如果不相等,就判断数a是否小于数b,

//如果是的话,就返回true

return u < v;


//如果a和b的位数相对,就返回flase;

return false;

}


int main() {

scanf("%s", s1);

scanf("%s", s2);

//调用上面的布尔函数,

//如果a长度小于b,就给他们换位置

if (qwe(s1, s2)) {

flag = 1;//标记是否被换位

strcpy(s3, s1);

strcpy(s1, s2);

strcpy(s2, s3);

}


int la = strlen(s1);

int lb = strlen(s2);

for (int i = 0; i < la; i++)

a[la - i] = s1[i] - '0';

//让数颠倒;个位在前面,从前面开始算


for (int i = 0; i < lb; i++)

b[lb - i] = s2[i] - '0';


int c0 = max(u, v);

for (int i = 1; i <= c0 ; i++) {


if (a[i] < b[i]) {//如果当前的第i位数,a<b

a[i + 1] -= 1;//就向a的下一位借1;

c[i] = a[i] + 10 - b[i];

continue;

}

c[i] = a[i] - b[i];//如果a[i]不大于b[i],就直接减

}

while (c[c0] == 0 && c0 > 1)

c0--;//如果第一位数是0,就减去,且c至少有一位,不包含前面的0


if (flag == 1) {

printf("-");//是被换过为,输出一个负号,因为是负数

}


for (int i = c0 ; i > 0; i--) {

printf("%d", c[i]);//然后倒叙输出

}

return 0;

}


高精度算法(减法)的评论 (共 条)

分享到微博请遵守国家法律