به خاطر اینه که length پرانتز میخواد
اشتباهات کدت رو comment کردم درستشو زیرش گذاشتم
#include <string>
#include <iostream>
using namespace std;
string sub(string x,string y)
{
string max=y;
string min=x;
if (x.length()>y.length()){
max = x;
min = y;
}
/*ezafi
else {
max = y;
min = x;
}
*/
// what if x.length == y.length ??
int i,temp=0;
int carry=0;
string result /* z */=" ";
for(i=min.length()-1;i>=0;i--)//min.length --> min.length()
{
int different=max.length()-min.length();//add
temp=max[i+different/*max.length()-min.length()*/] - min[i]+carry /*2* '0' */;
if(temp < 0 )
{
carry=10;
max[i+different-1 /*max.length()-min.length()-1*/]-=1 /*+='1'*/;
i++;//add
continue;//add
}
else//add
carry=0;
// z=(char)(temp+'0')+z; in shekli bar aks gharar dade mishe adad
if(i !=0 || temp !=0 ||max.length()!= min.length())//agar ragham aval 0 bashe lazem be ezafe kardan nist
result.insert(result.begin(),temp + '0');
}
i = max.length() - min.length()-1;
while(i>=0)
{
/*
temp=max[i]-'0';
z=(char)(temp+'0')+z;
*/
if(i !=0 || max[i] != '0')//agar ragham aval 0 bashe lazem be ezafe kardan nist
result.insert(result.begin(),max[i]+carry);
i--;
}
return result;
}
int main()
{
string a="144";
string b="4";
cout<<sub(a,b);
return 0;
}
ضمنا این کد 2 تا مشکل دیگه هم داره که خودت درستشون کن
1- اگر طول 2 تا عدد مساوی باشه ماکزیمم مینیمم رو درست تشخیص نمیده
2- بعضی وقت ها carry رو از چند رقم قبل باید بردازی مثلا 123-201 که این جا هم درست کار نمی کنه برنامت