我的LinkedList通过每个节点有一个数字来表示大数。
我可以用下面的代码在LinkedList中表示正的大整数:
public BigInteger(int x)
{
list = new LinkedList<Integer>();
while (x > 0)
{
list.push(( x % 10 ));
x = x / 10;
}
}
声明:
BigInteger bigPositive = new BigInteger(91234)
生产:
[9,1,2,3,4]
然而,我不确定如何表示大的负整数,如-9321312345
可以将1或0压入列表的前面,表示它是正的还是负的。例如:
- (15)将映射到[1 15]
- (-13)将映射到[0 13]
- (1)将映射到[11 1]
以此类推。您只需要知道将第一个数字解释为符号(+/-),而不是值的一部分。
如果BigInteger是您自己的自定义类,您可以添加一个Boolean属性来确定该整数是正还是负。
然后,在构造函数中,可以确定整数的符号并相应地设置该属性。
public BigInteger(int x)
这个值对于int x
,输入本身就是限制,所以你永远不能超过。
为什么不做呢?
public BigInteger(int x){
bigIntValue = x;
}
因为这不是重点。您希望能够从输入中创建比预期int
更大的值。
在我看来,更好的选择是添加String
作为输入,然后进行操作,可以将int's
或您想要的东西推到linklist
的后面或前面。
public BigInteger(String x)
{
int endLoop = 0;
list = new LinkedList<char>();
// have a boolean for negative in your class then multiple by
// negative one to your operations if its true.
if(x.charAt(0) == '-'){
this.negative = true;
endLoop = 1;
}
list = new LinkedList<char>();
int i = x.length() - 1;
while(i >= endLoop) {
if(!validNumber(x.charAt(i)) //fail
list.push(( x.charAt(i)));
i--;
}
}
// this checks if it's a number.
boolean validNumber(char n){
for(int i = 48; i =< 57; i++){
if(n = i) return true;
}
return false;
}
如果需要,甚至可以通过编写从char到int的转换器将列表类型更改为int。
你可以做同样的事情;通过使用第一位数字确定符号
0b0100 == 4
0b1100 == -4
同样你也可以写
{0, 1, 1} == 11
{1, 1, 1} == -11,
虽然这偏离了最初的想法;因为你正在处理整数,你可以这样做:
{-1, 1} == -11
{ 1, 1} == 11