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

📄 构造.cpp

📁 巨型整数类
💻 CPP
字号:

#include"head.h"

HugeInt::HugeInt(const char *buf){  //字符串构造
	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);

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

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

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

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

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

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

HugeInt::HugeInt(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];
}

HugeInt::HugeInt(const long &n){   //长整型构造函数
//	if(n>2147483648L || n<-2147483647L) throw OutofRange();
	int m;
	m=n;
	if(n<0) m=-m;
	int len=0,i=0,j;
	char buf[11],str[11],ch;
	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';          //添加结束符
    huge_t[0]=strlen(str);  //huge_t[0]存放字符串长度

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

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

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

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

		if(n<0)
			huge_t[ huge_t[0] ]=-huge_t[ huge_t[0] ];   //负号在末尾添上
}

⌨️ 快捷键说明

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