如何在Java中添加非常大的值?

如何在Java中添加非常大的值?,java,Java,我尝试了下面的代码,但出现了一个错误。如何将两个表示为字符串的大值相加 public class LargeAddition { static String testcase1 = "987659876598765"; static String testcase2 = "9999999999999999999999999988888888888";//can we add this kind of large num public static void main(

我尝试了下面的代码,但出现了一个错误。如何将两个表示为字符串的大值相加

public class LargeAddition {

    static String testcase1 = "987659876598765";
    static String testcase2 = "9999999999999999999999999988888888888";//can we add this kind of large num

    public static void main(String args[]){
        LargeAddition testInstance = new LargeAddition();
        String result = testInstance.add(testcase1,testcase2);
        System.out.println("Result : "+result);

    }

    //write your code here
    public String add(String str1, String str2){
        Long num=000000000000000L;
        //String str="";
        num=Long.parseLong(str1)+Long.parseLong(str2);
        //String str=num.toString();

        return num.toString();
    }
}

使用
biginger
Long
是这些值的缩写

public static String add(String str1, String str2) {
    BigInteger big1 = new BigInteger(str1);
    BigInteger big2 = new BigInteger(str2);

    final BigInteger num = big1.add(big2);
    return num.toString();
}

使用
biginger
Long
是这些值的缩写

public static String add(String str1, String str2) {
    BigInteger big1 = new BigInteger(str1);
    BigInteger big2 = new BigInteger(str2);

    final BigInteger num = big1.add(big2);
    return num.toString();
}

使用
biginger
Long
是这些值的缩写

public static String add(String str1, String str2) {
    BigInteger big1 = new BigInteger(str1);
    BigInteger big2 = new BigInteger(str2);

    final BigInteger num = big1.add(big2);
    return num.toString();
}

使用
biginger
Long
是这些值的缩写

public static String add(String str1, String str2) {
    BigInteger big1 = new BigInteger(str1);
    BigInteger big2 = new BigInteger(str2);

    final BigInteger num = big1.add(big2);
    return num.toString();
}

由于这是一个家庭作业,并且您不/不能使用诸如
biginger
之类的类,因此我将通过一种更加繁琐和手动的方式来完成(尽管这是一个很好的介绍作业)

可以循环使用大小为1到0的两个字符串整数

String integer1 = "1230"
String integer2 = "9999999"

for(int i = integer1.size; i >= 0; i--){
    //addition
}
但是,这可能是一个问题,因为两个字符串整数的大小不同。我将创建一个方法,在较小的字符串整数前面添加额外的零,以便两个字符串整数的大小匹配。例如“1230”->“0001230”

在循环之前,创建一个等于空字符串的输出字符串inter

String outputInt = "";
将每个字符转换为int,然后进行加法

int tempResult = Integer.parseInteger(integer1.indexOf(i)) + Integer.parseInteger(integer2.indexOf(i))
如果您得到一个单个数字,请将其转换为字符串并附加到输出字符串整数。如果您得到一个两位数,那么只需将第二位数追加,并将第一位数带入下一次计算

String tempResultStr = //convert tempResult into a String
if(tempResultStr .size == 1){
    //handle single digit case
}else{
    //handle double digit case
    //use a variable to declare carry over
}
如果你必须结转而没有什么可结转的,记得处理这个案子


注意:这在很大程度上是伪代码

因为这是一个家庭作业,并且您不/不能使用诸如
BigInteger
之类的类,所以我将通过一种更加繁琐和手动的方式来完成(尽管这是一个很好的介绍作业)

可以循环使用大小为1到0的两个字符串整数

String integer1 = "1230"
String integer2 = "9999999"

for(int i = integer1.size; i >= 0; i--){
    //addition
}
但是,这可能是一个问题,因为两个字符串整数的大小不同。我将创建一个方法,在较小的字符串整数前面添加额外的零,以便两个字符串整数的大小匹配。例如“1230”->“0001230”

在循环之前,创建一个等于空字符串的输出字符串inter

String outputInt = "";
将每个字符转换为int,然后进行加法

int tempResult = Integer.parseInteger(integer1.indexOf(i)) + Integer.parseInteger(integer2.indexOf(i))
如果您得到一个单个数字,请将其转换为字符串并附加到输出字符串整数。如果您得到一个两位数,那么只需将第二位数追加,并将第一位数带入下一次计算

String tempResultStr = //convert tempResult into a String
if(tempResultStr .size == 1){
    //handle single digit case
}else{
    //handle double digit case
    //use a variable to declare carry over
}
如果你必须结转而没有什么可结转的,记得处理这个案子


注意:这在很大程度上是伪代码

因为这是一个家庭作业,并且您不/不能使用诸如
BigInteger
之类的类,所以我将通过一种更加繁琐和手动的方式来完成(尽管这是一个很好的介绍作业)

可以循环使用大小为1到0的两个字符串整数

String integer1 = "1230"
String integer2 = "9999999"

for(int i = integer1.size; i >= 0; i--){
    //addition
}
但是,这可能是一个问题,因为两个字符串整数的大小不同。我将创建一个方法,在较小的字符串整数前面添加额外的零,以便两个字符串整数的大小匹配。例如“1230”->“0001230”

在循环之前,创建一个等于空字符串的输出字符串inter

String outputInt = "";
将每个字符转换为int,然后进行加法

int tempResult = Integer.parseInteger(integer1.indexOf(i)) + Integer.parseInteger(integer2.indexOf(i))
如果您得到一个单个数字,请将其转换为字符串并附加到输出字符串整数。如果您得到一个两位数,那么只需将第二位数追加,并将第一位数带入下一次计算

String tempResultStr = //convert tempResult into a String
if(tempResultStr .size == 1){
    //handle single digit case
}else{
    //handle double digit case
    //use a variable to declare carry over
}
如果你必须结转而没有什么可结转的,记得处理这个案子


注意:这在很大程度上是伪代码

因为这是一个家庭作业,并且您不/不能使用诸如
BigInteger
之类的类,所以我将通过一种更加繁琐和手动的方式来完成(尽管这是一个很好的介绍作业)

可以循环使用大小为1到0的两个字符串整数

String integer1 = "1230"
String integer2 = "9999999"

for(int i = integer1.size; i >= 0; i--){
    //addition
}
但是,这可能是一个问题,因为两个字符串整数的大小不同。我将创建一个方法,在较小的字符串整数前面添加额外的零,以便两个字符串整数的大小匹配。例如“1230”->“0001230”

在循环之前,创建一个等于空字符串的输出字符串inter

String outputInt = "";
将每个字符转换为int,然后进行加法

int tempResult = Integer.parseInteger(integer1.indexOf(i)) + Integer.parseInteger(integer2.indexOf(i))
如果您得到一个单个数字,请将其转换为字符串并附加到输出字符串整数。如果您得到一个两位数,那么只需将第二位数追加,并将第一位数带入下一次计算

String tempResultStr = //convert tempResult into a String
if(tempResultStr .size == 1){
    //handle single digit case
}else{
    //handle double digit case
    //use a variable to declare carry over
}
如果你必须结转而没有什么可结转的,记得处理这个案子

注意:如果您运行

System.out.println(Long.MAX_VALUE);
你会得到

9223372036854775807
你的价值观要高得多

9999999999999999999999999988888888888
所以方法是使用BigDecimal

BigDecimal bd = new BigDecimal("9999999999999999999999999988888888888");        
System.out.println(bd.multiply(bd));
给你

99999999999999999999999999777777777760000000000000000123456790143209876544
如果你跑

System.out.println(Long.MAX_VALUE);
你会得到

9223372036854775807
你的价值观要高得多

9999999999999999999999999988888888888
所以方法是使用BigDecimal

BigDecimal bd = new BigDecimal("9999999999999999999999999988888888888");        
System.out.println(bd.multiply(bd));
给你

99999999999999999999999999777777777760000000000000000123456790143209876544
如果你跑

System.out.println(Long.MAX_VALUE);
你会得到

9223372036854775807
你的价值观要高得多

9999999999999999999999999988888888888
所以方法是使用BigDecimal

BigDecimal bd = new BigDecimal("9999999999999999999999999988888888888");        
System.out.println(bd.multiply(bd));
给你

99999999999999999999999999777777777760000000000000000123456790143209876544
如果你跑

System.out.println(Long.MAX_VALUE);
你会得到

9223372036854775807
你的价值观要高得多

9999999999999999999999999988888888888
所以方法是使用BigDecimal

BigDecimal bd = new BigDecimal("9999999999999999999999999988888888888");        
System.out.println(bd.multiply(bd));
给你

99999999999999999999999999777777777760000000000000000123456790143209876544


检查
biginger
。检查
biginger
是如何操作的。biginger有什么问题?您可以始终使用包含整数值的双链接列表。然后创建一个计算系统。这是很多代码…但这是一个很好的实践!将每个字符串取反,将字符解析为单个数字,并将其添加到另一个字符串中的相应数字。计算进位,然后继续下一个字符。冲洗/重复,直到用完一根绳子和随身携带的物品。这个问题似乎离题了,因为这是一个问题,还没有真正的工作要做