加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数减法 (高精度运算)

发布时间:2020-12-14 03:53:19 所属栏目:大数据 来源:网络整理
导读:题意如下: 任意输入两个正整数n,m(0 = n,m = 10^100),求出n-m; 模板代码如下: #include stdio.h#include string.h#define MAXN 10005#define clr(N)memset(N,sizeof(N))int A[MAXN],B[MAXN],ans[MAXN];char a[MAXN],b[MAXN];void Sub(char p[],char q[]

题意如下:

任意输入两个正整数n,m(0 <= n,m <= 10^100),求出n-m;

模板代码如下:

#include <stdio.h>
#include <string.h>
#define MAXN 10005
#define clr(N)memset(N,sizeof(N))

int A[MAXN],B[MAXN],ans[MAXN];
char a[MAXN],b[MAXN];

void Sub(char p[],char q[],int Lp,int Lq)
{
    clr(A),clr(B),clr(ans);
    int k = 0;
    for(int i=Lp-1; i>=0; i--) {
        A[k++] = p[i] - 48;
    }
    k = 0;
    for(int i=Lq-1; i>=0; i--) {
        B[k++] = q[i] - 48;
    }
    for(int i=0; i<MAXN; i++) {
        ans[i] = A[i] - B[i];
        if(ans[i] < 0) {
            ans[i] = ans[i] + 10;
            A[i+1] = A[i+1] - 1;
        }
    }
}

int main() {
    while(~scanf("%s%s",a,b)) {
        if(strcmp(a,b)==0) {
            printf("0n");
            continue;
        }
        int La = strlen(a);
        int Lb = strlen(b);
        int FG = 0;
        if(La < Lb || (La == Lb && strcmp(a,b) < 0)) {
            Sub(b,Lb,La);
            FG = 1;
        }else {
            Sub(a,b,La,Lb);
        }
        if(FG) printf("-");
        int flag = 0;
        for(int i=MAXN-1; i>=0; i--) {
            if(flag) {
                printf("%d",ans[i]);
                continue;
            }else if(ans[i]) {
                flag = 1;
                printf("%d",ans[i]);
            }
        }
        printf("n");
    }
}



(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读