Я написал код для разницы между двумя большими числами (Код вставлен ниже). Я получаю результат (результат = 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;
}