بفرمایید ;)
#include <iostream>
#include <string>
using namespace std;
void Split_Number(string,string,string&,string&,string& ,string&);
void FillZero(string&,string&);
void Calculate_Ashar(string&,string&,string&,bool&);
void Calculate_Sahih(string& ,string&,string&,bool&);
void Remove_Zero(string&);
string Convert_To_String(int);
int Convert_To_Int(string);
string Str_Reverce(string); // baraye makoos kardane ashar . . .
int main()
{
char y='y';
while (y=='y' || y=='Y')
{
string Javab_Ashar="";
string Javab_Sahih="";
// get number a va b
string FirsNumber;
string SecondNumber;
cout<<"enter the first number: ";
getline(cin,FirsNumber);
cout<<"enter the second number: ";
getline(cin,SecondNumber);
string x1="",x2="",y1="",y2="";
Split_Number(FirsNumber,SecondNumber,x1,x2,y1,y2); // joda kardan ghesmate sahih va ashar va rikhtan dar motoghayer haye x1,x2,y1,y2
FillZero(x2,y2); // yeksan kardan ghesmate ashare 2 ragham
bool one=false;
Calculate_Ashar(x2,y2,Javab_Ashar,one); //void Calculate_Ashar(string&,string&,string&,bool&);
Calculate_Sahih(x1,y1,Javab_Sahih,one);
Remove_Zero(Javab_Ashar); //void Remove_Zero(string&);
if (Javab_Ashar[0]=='0' && Javab_Ashar.length()==1)
cout<<endl<<"Javab = "<<Javab_Sahih<<endl;
else
cout<<endl<<"Javab = "<<Javab_Sahih<<"."<<Javab_Ashar<<endl;
cout<<endl<<"Do you want to continue? (y/n): ";
cin>>y;
cout<<"____________________________________"<<endl <<endl;
cin.ignore();
}
}
void Split_Number(string a1,string b1,string& x1 ,string& x2,string& y1, string& y2)
{
bool flag1=false;
bool flag2=false;
for (unsigned int i = 0; i < a1.length(); i++)
{
if (a1[i]=='.')
{
flag1=true; // adad ashari hast
}
}
for (unsigned int i = 0; i < b1.length(); i++)
{
if (b1[i]=='.')
{
flag2=true; // adad ashari hast
}
}
if (flag1==true) // dar sorate ashari bodan : x1 = ghesmate sahih , x2=ghesmate ashari
{
unsigned int posA = a1.find(".");
x1=a1.substr(0,posA); // ghesmate sahih ( az 0 ta . )
x2 = a1.substr (posA+1); // ghesmate ashari ( az . ta akhar )
}
else // dar sorate ashari naboodan : x1=ghesmate sahih , x2=0
{
x1=a1;
x2="0";
}
if (flag2==true) // manand bala ( baraye adade dovom )
{
unsigned int posB = b1.find(".");
y1=b1.substr(0,posB);
y2 = b1.substr (posB+1);
}
else
{
y1=b1;
y2="0";
}
return;
}
void FillZero(string& x2,string& y2)
{
while (x2.length() > y2.length())
{
y2+='0';
}
while (y2.length() > x2.length())
{
x2+='0';
}
}
void Calculate_Ashar(string& x2,string& y2,string& Javab_Ashar,bool& one)
{
string temp="";
string temp1;
string temp2;
int r2=0;
int r4=0;
int sumHelp0=0;
int sumHelp1=0;
bool flg1=false;
one=false;
string strSumHelp="";
for (int i = x2.length()-1; i >= 0; i--)
{
temp1=x2[i];
temp2=y2[i];
r2=Convert_To_Int(temp1);
r4=Convert_To_Int(temp2);
bool found=false;
sumHelp1=r2+r4;
if (one==true)
{
sumHelp1=(r2+r4)+1;
one=false;
found=true;
}
else
{
sumHelp1=r2+r4;
}
if (sumHelp1>=10)
{
flg1=true;
}
if (flg1==true)
{
if (found==true)
{
sumHelp1=(r2+r4+1)-10;
}
else
{
sumHelp1=(r2+r4)-10;
}
one=true;
flg1=false;
}
else
{
if (found==true)
{
sumHelp1=(r2+r4)+1;
}
else
{
sumHelp1=r2+r4;
}
}
strSumHelp=Convert_To_String(sumHelp1);
temp+=strSumHelp;
}
one=one; // send true or false
Javab_Ashar=Str_Reverce(temp);
return;
}
void Calculate_Sahih(string& x1,string& x2, string& Javab_Sahih,bool& one)
{
int r1=Convert_To_Int(x1);
int r3=Convert_To_Int(x2);
int ReturnValue=0;
if (one==true)
ReturnValue=(r1+r3)+1;
else
ReturnValue=r1+r3;
Javab_Sahih=Convert_To_String(ReturnValue);
return;
}
void Remove_Zero(string& Javab_Ashar)
{
unsigned int posB;
bool flg=false;
//y1=b1.substr(0,posB);
// y2 = b1.substr (posB+1);
if (Javab_Ashar[0]!='0')
{
for (int i = Javab_Ashar.length()-1 ; i >=0 ; i--)
{
if (Javab_Ashar[i]!='0' && flg==false)
{
flg=true;
posB=i;
}
}
Javab_Ashar=Javab_Ashar.substr(0,posB+1);
}
}
int Convert_To_Int(string str)
{
int number;
number=atoi(str.c_str());
return number;
}
string Convert_To_String(int number)
{
if (number == 0)
return "0";
string temp="";
string returnvalue="";
while (number>0)
{
temp+=number%10+48;
number/=10;
}
for (unsigned int i=0;i<temp.length();i++)
returnvalue+=temp[temp.length()-i-1];
return returnvalue;
//Ya :
//#include <sstream>
//stringstream ss; //create a stringstream
//ss << number; //add number to the stream
//return ss.str(); //return a string with the contents of the stream
}
string Str_Reverce(string str)
{
string temp="";
for (int i = str.length()-1; i >= 0; i--)
{
temp+=str[i];
}
return temp;
}