📄 构造.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 + -