当前位置:文档之家› 长整数的四则运算

长整数的四则运算

void input(char* str);
void print();
CLongInt operator +(CLongInt d);
CLongInt operator -(CLongInt d);
CLongInt operator *(CLongInt d);
};
void CLongInt::print()
{
return 2;
}
else if(c1.digit<c2.digit)
{
return 0;
}
else //两者长度相等
{
for(i=c1.digit-1;i>=0;i--)
{
if(c1.numeral[i]>c2.numeral[i]){
return 2;
break;
}
else if(c1.numeral[i]<c2.numeral[i]){
carry = 1;
} else
carry=0;
}
if(carry == 1)
{ //最高位进位判断
temp.digit=c1.digit+1;
temp.numeral[c1.digit] = '1';
temp.numeral[c1.digit+1] = '\0';
}
else
{
temp.digit=c1.digit;
class CLongInt
{
bool symbol; //数字符号
int digit; //数字位数
char numeral[Max]; //用来存放各位的数字
public:
CLongInt(char* str)
{
symbol=true;
digit=0;
memset(numeral,0,Max);
}
}
for(int k=c2.digit;k<c1.digit;k++){
if(c1.numeral[k]=='0'&&carry==1){
temp.numeral[k] = '9';
carry = 1;
}else if(carry == 1){
temp.numeral[k]=(c1.numeral[k]-'0') - 1 + 48;
this->digit = len-1;
this->symbol=false;
}
else if(*str=='+')
{
i++;
this->digit = len-1;
this->symbol=true;
}
else
{
cout<<"数据输入错误,请重新输入!!!";
return;
}
while(i<len) //除了第一位其他位都应该是数字
{
if(c1.numeral[i]>c2.numeral[i]){
return 0;
break;
}
else if(c1.numeral[i]<c2.numeral[i]){
return 2;
break;
}
}
if(i==-1){
return 1;
}
}
}
if(c1.symbol==false)
{
if(c1.digit>c2.digit)
{
int i;
if(c1.symbol==c2.symbol) //比较的两者符号相同
{
if(c1.symbol==true)
{
if(c1.digit>c2.digit)
{
return 0;
}
else if(c1.digit<c2.digit)
{
return 2;
}
else //两者长度相等
{
for(i=c1.digit-1;i>=0;i--)
{
this->digit=0;
int i=0,j=0;
int len=strlen(str);
char *s=(char*)str;
if(*str<='9'&&*str>='0')
{
this->symbol=true;
this->digit = len;
}
else if(*str=='-')
{
i++;
this->numeral[this->digit] = '\0';
}
i++;
j++;
}
}
CLongInt abs_add(CLongInt c1,CLongInt c2) //绝对值相加
{
CLongInt temp;
int carry = 0; //标记进位
int i,number = 0;
if(c1.digit>=c2.digit) //前一个数比后一个数位数要大
{
for(i=0;i<c2.digit;i++)
{
//cout<<"c1:"<<c1.numeral[i]<<endl;
//cout<<"c2:"<<c2.numeral[i]<<endl;
//cout<<"c1+c2:"<<((c1.numeral[i]-'0')+(c2.numeral[i]-'0'))<<endl;
carry = 1;
}
else
carry=0; //每次进位后将进位清零
}
for(i=c1.digit;i<c2.digit;i++) //超越的位数
{
temp.numeral[i]=((c2.numeral[i]-'0')+carry)%10+48;
if(((c2.numeral[i]-'0')+carry)/10==1){
carry = 1;
}
else
carry=0;
}
if(carry == 1){ //最高位进位判断
temp.digit=c2.digit+1;
temp.numeral[c2.digit] = '1';
temp.numeral[c2.digit+1] = '\0';
}else{
temp.digit=c2.digit;
friend CLongInt abs_mul(CLongInt c1,int abs,int size);
//friend CLongInt abs_div(CLongInt c1,CLongInt c2); //绝对值相除
int CompareLongInt(CLongInt c1,CLongInt c2); // 比较长整数大小
carry = 0;
}else{
temp.numeral[k] = c1.numeral[k];
}
}
temp.digit=c1.digit;
temp.numeral[c1.digit] = '\0';
int k=c1.digit-1;
input(str);
}
CLongInt()
{
symbol=true; //默认为正数
digit=0; //默认为0
numeral[0]='0';
}
friend ostream& operator <<(ostream& os,CLongInt& d);
friend istream& operator >>(istream& is,CLongInt& d);
{
for(int k=0;k<c2.digit;k++){
if(c1.numeral[k]=='0'&&carry==1){
c1.numeral[k] = '9';
carry = 1;
}else if(carry == 1){
c1.numeral[k]=(c1.numeral[k]-'0') - 1 + 48;
return 0;
break;
}
}
if(i==-1){
return 1;
}
}
}
}
else //比较的两者符号不同
{
if(c1.symbol==true) //前正后负
{
return 0;
}
else if(c1.symbol!=true)
{
return 2;
}
}
}
void CLongInt::input(char *str)
carry = 1;
} else
carry=0;
}
for(i=c2.digit;i<c1.digit;i++) //超越的位数
{
temp.numeral[i]=((c1.numeral[i]-'0')+carry)%10+48;
相关主题