LinkedList中的大负整数表示



我的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

相关内容

  • 没有找到相关文章

最新更新