test.cpp
#include
#include
using namespace std;
// extra the class of string
class String:public string
{
public:
// mode the add of int
static string ADD_Int(string a,string b)
{
// exception of input
if( a.empty() )
return b;
else if( b.empty() )
return "0";
if(!check_all_number(a) || !check_all_number(b))
{
return "exception of input ADD_Int";
}
Standardization(a);
Standardization(b);
if(a[0] != '-' && b[0] != '-')
return AddInt(a,b);
else if(a[0] != '-'&& b[0] == '-')
return MinusInt( a,b.substr( 1,b.size() ) );
else if(a[0] == '-'&& b[0] != '-')
return MinusInt(b,a.substr(1,a.size()));
else return '-'+AddInt(a.substr(1,a.size()),b.substr( 1,b.size() ));
}
// make a-b mode int a - b;
static string MINUS_Int(string a,string b)
{
// exception of input
if( a.empty() )
return b;
else if( b.empty() )
return "0";
if(!check_all_number(a) || !check_all_number(b))
{
return "exception of input Multiplies_Int";
}
Standardization(a);
Standardization(b);
if(a[0] != '-' && b[0] != '-')
return MinusInt(a,b);
else if(a[0] != '-' && b[0] == '-')
return AddInt(a,b.substr(1,b.size()));
else if(a[0] == '-' && b[0] != '-')
return "-"+AddInt(a.substr(1,a.size()),b);
else return MinusInt( b.substr(1,b.size()) , a.substr(1,a.size()) );
}
// make a*b mode int a * b;
static string MULT_Int(string a,string b)
{
// exception of input
if( a.empty() )
return b;
else if( b.empty() )
return "0";
if(!check_all_number(a) || !check_all_number(b))
{
return "exception of input Multiplies_Int";
}
Standardization(a);
Standardization(b);
string::size_type i = a.size(),j = b.size();
string c = "0",d = "";
bool fushu = (a[0] == '-' && b[0] != '-')||(a[0] != '-' && b[0] == '-');
if(a[0] == '-')
a = a.substr(1,a.size());
if(b[0] == '-')
b = b.substr(1,b.size());
int jinwei = 0;
for( j = b.size()-1 ; j < b.size() ;j--)
{
// each number of b to * a
jinwei = 0;
for( i = a.size()-1 ; i < a.size() ;i-- )
{
d = IntToChar( ( CharToNumber(a[i]) * CharToNumber(b[j]) + jinwei ) % 10 )+ d ;
jinwei = ( CharToNumber(a[i]) * CharToNumber(b[j]) + jinwei ) / 10 ;
}
if(jinwei)
d = IntToChar(jinwei) +d;
// add all number result
c = ADD_Int(c,d);
d = "";
unsigned int zero = 0 ;
while( zero < b.size() - j )
{
d = d + '0';
zero ++;
}
}
Standardization(c);
if( fushu )
return '-'+c;
else return c;
}
// mode the division a/b
static string DIV_Int(string a,string b)
{
// exception of input
if( a.empty() )
return "0";
else if( b.empty() )
return "e";
if(!check_all_number(a) || !check_all_number(b))
{
return "exception of input DIV_Int";
}
Standardization(a);
Standardization(b);
if(b == "0")
return "e";
bool fushu = (a[0] == '-' && b[0] != '-')||(a[0] != '-' && b[0] == '-');
if( a[0] == '-' )
a = a.substr(1,a.size());
if( b[0] == '-' )
b = b.substr(1,b.size());
if( Compare(a,b) == '<' )
return "0";
string yushu = "";
string beichushu = a.substr(0,b.size());
string shang = Division( beichushu , b);
yushu = MinusInt( beichushu ,MULT_Int( shang, b) );
string c = shang;
for(string::size_type i = b.size(); i9 )
return "e";
return ""+IntToChar(i);
}
// make a-b mode int a - b;
static string MinusInt(string a,string b)
{
// exception of input
if(!check_all_number(a) || !check_all_number(b))
return "exception of input MinusInt";
Standardization(a);
Standardization(b);
// particular string of input
if(a.empty())
{
if(b.empty())
return "0";
else
return "-"+b;
}
else if(b.empty())
{
return a;
}
// normal number a < b
string c = "";
bool check = true ;
if(Compare(a,b) == '=')
return "0";
else if(Compare(a,b) == '<')
{
c = a ;
a = b ;
b = c ;
c = "";
check = false ;
}
// normal number a >= b
string::size_type i = a.size()-1, j = b.size()-1;
int jiewei = 0,now;
while(i < a.size() && j < b.size())
{
now = CharToNumber(a[i]) - CharToNumber(b[j]) - jiewei ;
if( now < 0 )
{
jiewei = 1;
now = 10 + now ;
}
else jiewei = 0;
c = IntToChar(now) + c ;
i--;j--;
}
while(i < a.size())
{
now = CharToNumber(a[i]) - jiewei ;
if( now < 0 )
{
jiewei = 1;
now = 10 + now ;
}
else jiewei = 0;
c = IntToChar( now ) + c ;
i--;
}
Standardization(c);
if(!check)
c = '-' + c;
return c;
}
// mode the add of int
static string AddInt(string a,string b)
{
// exception of input
if( a.empty() )
return b;
else if( b.empty() )
return "0";
if(!check_all_number(a) || !check_all_number(b))
{
return "exception of input AddInt";
}
Standardization(a);
Standardization(b);
string::size_type i = a.size()-1 ,j = b.size()-1 , k = 0 ;
string c = "";
int jinwei = 0;
while( i < a.size() && j < b.size() )
{
c = IntToChar( ( CharToNumber(a[i]) + CharToNumber(b[j]) + jinwei ) % 10 ) + c;
jinwei = ( CharToNumber(a[i]) + CharToNumber(b[j]) + jinwei ) / 10;
j--;i--;
}
while( j < b.size() )
{
c = IntToChar( ( CharToNumber(b[j]) + jinwei ) % 10 ) + c;
jinwei = ( jinwei + CharToNumber(b[j]) ) / 10;
j--;
}
while( i < a.size() )
{
c = IntToChar( ( CharToNumber(a[i]) + jinwei ) % 10 ) + c;
jinwei = ( jinwei + CharToNumber(a[i]) ) / 10;
i--;
}
if( jinwei )
c = IntToChar( jinwei ) + c;
Standardization(c);
return c;
}
// make char to the int number
static int CharToNumber(char c)
{
if( c >= '0' && c <= '9' )
return int(c - '0');
else
{
cout<= 0 && i <= 9 )
{
string c = "";
return c+char(i+48);
}
else
{
cout< '9')
return false;
i++;
}
return true ;
}
// compare string a and b
static char Compare(string a,string b)
{
if(a.empty() || b.empty())
{
cout<<"error of input compare";
return 'e';
}
else
{
if(!check_all_number(a) || !check_all_number(b))
{
return 'e';
}
Standardization(a);
Standardization(b);
if(a[0] == '-' && b[0] != '-')
return '<';
else if( a[0] != '-' && b[0] == '-')
return '>';
bool fushu = (a[0] == '-');
if(a.size() > b.size() )
return fushu?'<':'>';
else if(a.size() == b.size())
{
for(string::size_type i = 0;i < a.size(); i++)
{
if(a[i] > b[i])
return fushu?'<':'>';
if(a[i] < b[i])
return fushu?'>':'<';
}
return '=';
}
return fushu?'>':'<';
}
}
// make string into standard number
static void Standardization(string &a)
{
if(!check_all_number(a))
{
cout<>a>>b;
cout<<"a="<<><>