Не удалось получить отрицательные результаты в моем коде - PullRequest
0 голосов
/ 29 марта 2020

Я написал код для разницы между двумя большими числами (Код вставлен ниже). Я получаю результат (результат = N1 - N2) правильно, если N1> N2, но не получаю правильные результаты в случае N1 <= N2. Я не уверен, что это - синтаксическая ошибка или логическая ошибка. Буду признателен за любую помощь! </p>

PS - Я не профессиональный кодер, поэтому, пожалуйста, простите, если есть какая-либо ошибка в c. Заранее спасибо!

#include<bits/stdc++.h> 
using namespace std; 
#include <string>

int sgn(int x){
    if (x>=0){
        return 1;
    }
    else{
        return -1;
    }
}


int SignValue(int x){
    if (x>=0){
        return 0;
    }
    else{
        return -1;
    }
}


string SubtractBigNumbers(string s1, string s2){
    int i1=0, i2=0, i3, i4;
    i3=s1.length(), i4=s2.length();
        if (i3>i4){
            // cout << "here";
            int A[i3], B[i3], C[i3];
                for (int i2=0; i2<i3; i2++){
                    A[i2]=(int) s1[i2] - 48;
                }

                for (int i2=0; i2<i3-i4; i2++){
                    B[i2]=0;
                }

                for (int i2=i3-i4; i2<i3; i2++){
                    B[i2]=(int) s2[i2-i3+i4] - 48;
                }

                for (int i2=0; i2<i3; i2++){
                    C[i2]=A[i2]-B[i2];
                }

                for (i2=i3-1; i2>0; i2--){
                    C[i2-1]=C[i2-1]+SignValue(C[i2]);
                    C[i2]=C[i2]-10*SignValue(C[i2]);
                }

                for (i1=0; i1<i3; i1++){
                    if (C[i1]!=0){
                        break;
                    }
                }

            int id=i3-i1+1;
            string N="";
                for (i2=1; i2<id; i2++){
                    N.push_back(C[i1+i2-1] + 48);
                }

            return N;
        }
        else if (i3=i4){
            int A[i3], B[i3], C[i3];
            int j=0,k;
                for (i2=0; i2<i3; i2++){
                    A[i2]=(int) s1[i2] - 48;
                    B[i2]=(int) s2[i2] - 48;
                        if (A[i2]-B[i2]==0){
                            j=j+1;
                        }
                }

                for (i1=0; i1<i3; i1++){
                    if (A[i1]-B[i1]!=0){
                        break;
                    }
                }
                k=i1;
                if (j==i3){
                    return 0;
                }
                else{
                    i1=0;
                        for (i2=0; i2<i3; i2++){
                            C[i2]=sgn(A[k]-B[k])*(A[i2]-B[i2]);
                        }

                        for (i1=0; i1<i3; i1++){
                            if (C[i1]!=0){
                                break;
                            }
                        }
                        int i_cmod=i3-i1+1;
                        int CMod[i_cmod];
                        for (i2=0; i2<i_cmod; i2++){
                            CMod[i2]=C[i1+i2-1];
                        }

                        for (i2=i_cmod-1; i2>0; i2--){
                            CMod[i2-1]=CMod[i2-1]+SignValue(CMod[i2]);
                            CMod[i2]=CMod[i2]-10*SignValue(CMod[i2]);
                        }

                        for (i1=0; i1<i_cmod; i1++){
                            if (CMod[i1]!=0){
                                break;
                            }
                        }
                        int i_d=i_cmod-i1+1;
                        int D[i_d];
                        for (i2=0; i2<i_d; i2++){
                            D[i2]=CMod[i1+i2-1];
                        }

                        string N="";

                        if (A[k]-B[k]>0){
                            for (i2=1; i2<i_d; i2++){
                                N.push_back(D[i2] + 48);
                            }
                            return N;
                        }

                        if (A[k]-B[k]<0){
                            int E[i_d];
                            E[0]=0;
                            E[1]=-1*D[1];
                            for (i2=2; i2<i_d; i2++){
                                E[i2]=D[i2];
                            }
                            for (i2=1; i2<i_d; i2++){
                                N.push_back(E[i2] + 48);
                            }
                            return N;
                        }
                }
        }
}
// Driver code 
int main() 
{ 
    string str1 = "1222"; 
    string str2 = "121"; 
    cout << SubtractBigNumbers(str1, str2); 
    return 0; 
} 
...