我的高精度减法结果不是正确的,有谁帮我看下

它输出的结果不正确

#include
using namespace std;
char s1[10090],s2[10090],s3[10090];
int a[10090],b[10090],c[10090]; 
bool cmp(char s1[],char s2[]){
    int n=strlen(s1),m=strlen(s2);
    if(n!=m){
        return nelse{
        for(int i=0;iif(s1[i]!=s2[i]){
                return s1[i]return false;
    }
}
int main(){
    int la,lb,lc;
    int i;
    memset(a,0,sizeof(a));  
    memset(b,0,sizeof(b));  
    memset(c,0,sizeof(c));  
    cin>>s1>>s2;
    la=strlen(s1);
    lb=strlen(s2);
    if(cmp(s1,s2)){
        strcpy(s3,s1);
        strcpy(s1,s2);
        strcpy(s2,s3);
        cout<<"-";
    }
    la=strlen(s1),lb=strlen(s2);
    for(i=0;i'0';
    for(i=0;i'0';
    lc=max(la,lb);
    i=1;
    while(i<=la || i<=lb){
        if(a[i]10;
            a[i+1]--;
        }
        c[i]=a[i]-b[i];
        i++; 
    }
    while(c[lc]==0 && lc>1) lc--;
    for(i=lc;i>=1;i--){
        cout<return 0;
}

在您的代码中,减法的部分有问题。您用了 s1 的长度去循环数组 b,导致 b 数组没有赋值,后面减法出现问题。应该将 s2 的长度赋值给 lb,循环数组 b 时使用 lb。同时,循环数组 a 和 b 时应该使用 lc,保证从高位到低位依次进行减法运算。

下面是修正后的代码:

#include<bits/stdc++.h>
using namespace std;
char s1[10090],s2[10090],s3[10090];
int a[10090],b[10090],c[10090]; 
bool cmp(char s1[],char s2[]){
    int n=strlen(s1),m=strlen(s2);
    if(n!=m){
        return n<m;
    }else{
        for(int i=0;i<n;i++){
            if(s1[i]!=s2[i]){
                return s1[i]<s2[i];
            }
        }
        return false;
    }
}
int main(){
    int la,lb,lc;
    int i;
    memset(a,0,sizeof(a));  
    memset(b,0,sizeof(b));  
    memset(c,0,sizeof(c));  
    cin>>s1>>s2;
    la=strlen(s1);
    lb=strlen(s2);
    if(cmp(s1,s2)){
        strcpy(s3,s1);
        strcpy(s1,s2);
        strcpy(s2,s3);
        cout<<"-";
    }
    la=strlen(s1),lb=strlen(s2);
    for(i=0;i<la;i++) a[la-i]=s1[i]-'0';
    for(i=0;i<lb;i++) b[lb-i]=s2[i]-'0';
    lc=max(la,lb);
    i=1;
    while(i<=lc){
        if(a[i]<b[i]){
            a[i]+=10;
            a[i+1]--;
        }
        c[i]=a[i]-b[i];
        i++; 
    }
    while(c[lc]==0 && lc>1) lc--;
    for(i=lc;i>=1;i--){
        cout<<c[i]; 
    }
    return 0;
}


答案来自c++ https://www.wodianping.com/