📄 输入输出.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 + -