我在整理我的一个关于大整数头文件,突然发现旧版和新版比较大小的函数有特别不同:
新版:
bool operator ==(BIGINT in1,BIGINT in2) {
if(in1.symbol!=in2.symbol)return 0;
if(in1.len!=in2.len)return 0;
for(long long i=1; i<=in1.len; i++)if(in1.value[i]!=in2.value[i])return 0;
return 1;
}
bool operator !=(BIGINT in1,BIGINT in2) {
if(in1.symbol!=in2.symbol)return 1;
if(in1.len!=in2.len)return 1;
for(long long i=1; i<=in1.len; i++)if(in1.value[i]!=in2.value[i])return 1;
return 0;
}
bool operator >(BIGINT in1,BIGINT in2) {
if(in1.symbol!=in2.symbol)return in1.symbol<in2.symbol;
if(in1.len!=in2.len)return (in1.len>in2.len)^(in1.symbol);
for(long long i=1; i<=in1.len; i++)if(in1.value[i]!=in2.value[i])return (in1.value[i]>in2.value[i])^in1.symbol;
return 0;
}
bool operator <(BIGINT in1,BIGINT in2) {
if(in1.symbol!=in2.symbol)return in1.symbol>in2.symbol;
if(in1.len!=in2.len)return (in1.len<in2.len)^(in1.symbol);
for(long long i=1; i<=in1.len; i++)if(in1.value[i]!=in2.value[i])return (in1.value[i]<in2.value[i])^in1.symbol;
return 0;
}
bool operator >=(BIGINT in1,BIGINT in2) {
if(in1.symbol!=in2.symbol)return in1.symbol<in2.symbol;
if(in1.len!=in2.len)return (in1.len>in2.len)^(in1.symbol);
for(long long i=1; i<=in1.len; i++)if(in1.value[i]!=in2.value[i])return (in1.value[i]>in2.value[i])^in1.symbol;
return 1;
}
bool operator <=(BIGINT in1,BIGINT in2) {
if(in1.symbol!=in2.symbol)return in1.symbol>in2.symbol;
if(in1.len!=in2.len)return (in1.len<in2.len)^(in1.symbol);
for(long long i=1; i<=in1.len; i++)if(in1.value[i]!=in2.value[i])return (in1.value[i]<in2.value[i])^in1.symbol;
return 1;
}
旧版:
short int thansizeBI(BIGINT in1,BIGINT in2) {//比较大整数大小 0> 1< 2==
if(in1.symbol==1 && in2.symbol==1)return thansizeBI(-in2,-in1);//反过来
if (in1.len > in2.len || (in1.symbol == 0 && in2.symbol == 1))return 0;
else if (in1.len < in2.len || (in1.symbol == 1 && in2.symbol==0)) return 1;
else {
for (long long i = 0; i < in1.len; i++) {
if (in1.value[i] > in2.value[i])return 0;
else if (in1.value[i] < in2.value[i])return 1;
}
}
return 2;
}
sym/symbol:符号,0正1负
不同的是:
新版使用位运算处理符号,旧版使用递归转化处理。
没了