整理代码突然发现
  • 板块灌水区
  • 楼主xingjielongSYH
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/10/4 17:53
  • 上次更新2024/10/4 20:09:49
查看原帖
整理代码突然发现
1436254
xingjielongSYH楼主2024/10/4 17:53

我在整理我的一个关于大整数头文件,突然发现旧版和新版比较大小的函数有特别不同:
新版:

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:符号,01

不同的是:
新版使用位运算处理符号,旧版使用递归转化处理。

没了

2024/10/4 17:53
加载中...