java 如何将长函数转换为Biginteger转换为字符串?

dauxcl2d  于 2023-04-04  发布在  Java
关注(0)|答案(2)|浏览(158)

我尝试将long变量改为BigInteger,因为我在其中存储斐波那契数列的数字,然后最终将它们转换为字符串。

public class Fib {
    public static void main(String args[])
    {
        long n1=0,n2=1,n3,i,count = 100;
        System.out.print(n1+" "+n2);//printing 0 and 1

        for(i=2;i<count;++i)//loop starts from 2 because 0 and 1 are already printed
             {
                n3=n1+n2;
                System.out.print(" "+n3);
                n1=n2;
                n2=n3;
            }

        }} :

我试着把它转换成一个BigInteger和一个字符串,就像这样……

public class Fib {
    public static void main(String args[])
    {
        long n1=0,n2=1,n3,i,count = 100;
        BigInteger n1,n2,n3,i,count = BigInteger.valueOf(n1,n2,n3,i,count)
        System.out.print(n1+" "+n2);//printing 0 and 1

        for(i=2;i<count;++i)//loop starts from 2 because 0 and 1 are already printed
             {
                String n3= n1+n2;
                System.out.print(" "+n3);
                n1=n2;
                n2=n3;
            }

        }}

然而,一个错误发生了,我试着阅读将长变量转换为BigIntegers和将BigIntegers转换为字符串的语法,我明白我所做的是错误的。
然而,我似乎找不到实现我想要做的事情的正确方法,这就是为什么我来到StackOverflow寻求帮助。
如果有人能帮我这个忙,我将不胜感激.

j2qf4p5b

j2qf4p5b1#

java规范严格定义了什么运算符可以应用于什么以及它的含义。具体来说,所有常见的数学运算符(+-等)都只适用于原始数字**,唯一的例外是+,它可以显示在字符串和其他任何东西之间,但这是一个完全不同的东西(字符串连接而不是数字加法)。

它们根本不能应用于BigInteger-规范没有列出这意味着什么,java没有运算符重载。

直接替换的方法名为addsubtractmultiplydivide,令人困惑。

BigInteger a = BigInteger.ONE;
BigInteger b = BigInteger.ONE;
BigInteger c = a + b; // wrong
BigInteger c = a.add(b); // correct

更好的名字应该是plusminustimes,和dividedBy。在这个意义上,如果我在黑板上写a = b + c,我要求你大声读出来,你会说:“a等于B加c”。不是“a等于b加c”。但是,它就是它-只需记住,a.add(b)将计算a和b的总和并返回一个全新的BigInteger结果。它不会 * 将b添加到a。(BigInteger是不可变的;不可能通过调用其上的方法或黑客之外的任何其他方式来更改其值)。

wgx48brx

wgx48brx2#

首先,您需要更改以下行,因为您不能同时执行多个示例化,并且提供的方法只允许传递一个参数。
变更

BigInteger n1,n2,n3,i,count = BigInteger.valueOf(n1,n2,n3,i,count);

BigInteger n1    = BigInteger.valueOf(lngN1);
BigInteger n2    = BigInteger.valueOf(lngN2);
BigInteger n3    = BigInteger.valueOf(lngN3);
BigInteger i     = BigInteger.valueOf(lngI);
BigInteger count = BigInteger.valueOf(lngCount);

注意我是如何改变长整型变量名的。你不能在同一个作用域中声明一个变量名两次。
您不能这样做:

long       n1 = 1L;
BigInteger n1 = BigInteger.ONE;

因为它们有相同的名字。你指的是哪个n1?所以,你的长需要有不同的名字比你的大整数。
实际上,你不需要所有的变量/属性都是BigInteger。当我清理代码时,我得到了这个:

import java.math.BigInteger;

public class Fib {
    public static void main(String[] args) {
        long count = 100;
        BigInteger n1 = BigInteger.valueOf(0L);
        BigInteger n2 = BigInteger.valueOf(1L);
        BigInteger n3 = null;
        
        
        System.out.print(n1 + " " + n2);//printing 0 and 1
        
        for (long i=2; i<count; ++i) {//loop starts from 2 because 0 and 1 are already printed
            n3 = n1.add(n2);
            System.out.print(" " + n3);
            n1 = n2;
            n2 = n3;
        }       
    }
}

(EDIT/添加)
实际上,BigInteger已经内置了0和1,所以你可以

BigInteger n1 = BigInteger.ZERO;
BigInteger n2 = BigInteger.ONE;

相关问题