⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 输入输出.cpp

📁 巨型整数类
💻 CPP
字号:

#include"head.h"

void HugeInt::str_to_huge(const char *buf,HugeInt &h){  //字符串转化成巨型整数
	int i,j,len;
	char ch,str[MAX*Digit+1];
	len=strlen(buf);


    if( buf[0]=='-' || buf[0]=='+' ){  //如果有负号,则先把负号过滤掉
		for(i=1; i<=len; i++)
			str[i-1]=buf[i];
	}
	else if( buf[0]!='-' && buf[0]!='+' )
		strcpy(str,buf);

    h.huge_t[0]=strlen(str);  //huge_t[0]存放字符串长度

	for( i=h.huge_t[0]/2 - 1; i>=0 ; i-- ){  //输入的字符串反向交换
		ch=str[i];     
		str[i]=str[h.huge_t[0]-1-i];
		str[h.huge_t[0]-1-i]=ch;
	}

	h.huge_t[0]=( h.huge_t[0]+Digit-1 )/Digit;  //字符串长度转化成进制数组的长度
	
	for( j=strlen(str) ; j<h.huge_t[0]*Digit ; str[j++]='0' );  //最高位位数不满足进制位数则补0

	for( i=1; i<=h.huge_t[0] ; i++ )
		for( h.huge_t[i]=0,j=0; j<Digit ; j++ )
			h.huge_t[i]=h.huge_t[i]*10 + str[i*Digit-1-j] - '0'; //转化成整型

		for(; h.huge_t[ h.huge_t[0] ]==0 && h.huge_t[0]>1 ; h.huge_t[0]-- ); //转化后的高位为0则去掉

		if(buf[0]=='-')
			h.huge_t[ h.huge_t[0] ]=-h.huge_t[ h.huge_t[0] ];   //负号在末尾添上
		

}

//---------------------长整型转化成巨型整数---------------------//
void HugeInt::long_to_huge(const long &n,HugeInt &h){
	long m;
	m=n;
	if(n<0) m=-m;
	int len=0,i=0,j=0;
	char buf[12],str[12];
	if(n==0) { buf[len]='0'; len++; }
	while(m){               //长整型转化成字符串(还只是反向)
		buf[len]=m%10+'0';
	    m=m/10;
		len++;
	}
    buf[len]='\0';           //添加结束符

    for(i=len-1,j=0;i>=0; i--,j++)   //将反向的字符串转化成与长整型数对应的字符串
		str[j]=buf[i];
     str[j]='\0';          //添加结束符
	h.str_to_huge(str,h);
	if(n<0) h=-h;
}

istream &operator>> (istream &is, HugeInt &h){
	char buf[MAX*Digit+1];  // buf用于输入字符数组,ch用于交换
    memset(h.huge_t,0, sizeof(h.huge_t));   //数组每一位都初始化为0
	is>>buf;
    h.str_to_huge(buf,h);
		return is;
}

ostream &operator<< (ostream &out, HugeInt &h ){
	int i,j;
	i=h.huge_t[0];

	out<<h.huge_t[i];  //先把数组最后一个数输出来,为巨型整数的首位数
	for( i=i-1 ; i>0 ; i-- )
		for( j=Depth/10; j>0 ; j=j/10 )  //由高位向低位输出
			out<<h.huge_t[i]/j%10;

	return out;
}

HugeInt &HugeInt::operator=(const HugeInt &h){  //赋值运算符重载
	int i;
	huge_t[0]=h.huge_t[0];
	for( i=1; i<=h.huge_t[0]; i++)
		huge_t[i]=h.huge_t[i];

	return *this;
}

HugeInt HugeInt::operator-(){
	HugeInt temp;
	temp.huge_t[0]=huge_t[0];
	for( int i=1; i<huge_t[0] ; i++ )
		temp.huge_t[i]=huge_t[i];
	temp.huge_t[ huge_t[0] ]=-huge_t[ huge_t[0] ];
	return temp;
}

















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -