编一个JAVA程序

来源:百度知道 编辑:UC知道 时间:2024/06/18 14:35:03
编写几个函数,关于Qnumber的,Qnumber是一个高精度整数(注意,需要让它在储存记忆许可范围之内)

Qzero:Qnumber
不用输入,自动产生一个Qnumber,并且把这个number定为0

Qneg(Qnumber):输入一个数,取它的相反数

Qadd(Qnumber,Qnumber):把两个数相加,第一个数不许变

Qmul(Qnumber,Qnumber):把两个数相乘,第一个数不许变,乘积结果取代第二个数

Qeq(Qnumber,Qnumber):两个数相等输出true,否则false,两个数均不能变

Qless(Qnumber,Qnumber):第一个数<第二个,输出true,否则false,两个数均不能变

Qin(char,Qnumber):把char缀到Qnumber的后面。比如v=1234,Qin('5',v)之后v=12345

Qsign(Qnumber):返回Qnumber的符号(格式是char)

Qfd(Qnumber):返回这个数的最高位(格式是char)

Qnd(Qnumber):返回这个数的最高位的下一位(格式是char)

嗯。就这么多。如果用链表的话,那么不能用向量或者JAVA里面的目标,自己做链
楼下kys大侠真是有水平,超级准确就运行出来了。不过我们题目的形式是这样的:
12 35 + =>46
12DD* =>144
再复杂点比如 12 34 56 * ~ 78 ~ ++ =>-1970

解释一下:
12 35 + =>46
表示12+35=46
12DD* =>144
表示第一个D复制了12变成了12,第二个D复制了第一个D处的数变成了12,*是运算两个D之间的。所以答案144
12 34 56 * ~ 78 ~ ++
表示第一个12先不参加运算,看34 和56后面的*是运算34和56的。所以变成了

楼主的问题很有意思,抽时间简单写了一个粗糙的代码,楼主自己测一测吧,也正好看一看
关于范围的话,没有办法苛求,理论上最大的位数应该是2的32次方-1,但实际上都受到物理内存的限制
PS:强烈支持开源,鄙视楼下那些动不动就要钱的,代码这东西就是互相交流才有提高,不愿拿出来就捂在被子里发霉当宝吧!
import java.math.BigInteger;

public class MyBigInteger{
public static BigInteger Qzero(){//返回0
return BigInteger.ZERO;
}

public static BigInteger Qneq(BigInteger bnum){//取反
return bnum.andNot(BigInteger.ZERO);
}

public static BigInteger Qadd(BigInteger num1,BigInteger num2){//相加
return num1.add(num2);
}

public static BigInteger Qmul(BigInteger num1,BigInteger num2){//相乘
return num1.multiply(num2);
}

public static boolean Qeq(BigInteger num1,BigInteger num2){//比较
int r = num1.compareTo(num2);
if(r==0){
return true;
}
return false;
}

public static boolean Qless(BigInteger num1,BigInteger num2){//比较
int r = num1.compareTo(num2);
if(r==-1){