2014-01-30 2 views
0

Я пробовал код ниже, но я получаю сообщение об ошибке. Как я могу добавить два больших значения, представленных в виде строк вместе?Как добавить очень большие значения в Java?

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(); 
    } 
} 
+11

Отъезд 'BigInteger'. –

+0

любая вещь без большого целого .............. – user3229433

+0

Yup. Множество Java-кода. Начните писать :-) –

ответ

2

Использование BigInteger, 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(); 
} 
1

Поскольку это домашнее задание, и вы не/не можете использовать классы, такие как BigInteger, я пойду через более утомительный и ручной способ сделать это (хотя хорошее уступке введения) ,

Вы можете цикл через два строковых целых чисел от размера-1 до 0.

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

for(int i = integer1.size; i >= 0; i--){ 
    //addition 
} 

Однако, это может быть проблемой, так как две строковые-целые числа имеют разные размеры. Я бы создал метод, который добавит дополнительные нули в начало меньшего String-integer, так что оба String-integers совпадают по размеру. Ex. "1230" -> "00"

Перед циклом создайте выход String-inter, равный пустой строке.

String outputInt = ""; 

Преобразование каждого символа в int, а затем добавление.

int tempResult = Integer.parseInteger(integer1.indexOf(i)) + Integer.parseInteger(integer2.indexOf(i)) 

Если вы получаете одну цифру, преобразуйте ее в String и добавьте к выходу String-integer. Если вы получаете двойную цифру, тогда только добавляйте вторую цифру и переносите первую цифру в следующий расчет.

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 
} 

Не забудьте обработать дело, если вам нужно переносить и нечего переносить.

ПРИМЕЧАНИЕ: Это псевдо-код для большей части

+0

Вы, кажется, просто задумывались вслух. Вы когда-нибудь это делали? JRE уже содержит не один, а два класса, которые уже делают это правильно. – EJP

+0

@EJP Итак, вы говорите мне, что не думаете, что это домашнее задание, чтобы понять, как компьютеры добавляют? Это не мыслит вслух. Я даю ему простое руководство, чтобы обойтись без использования BigInteger или других подобных классов. –

0

Если вы бежите

System.out.println(Long.MAX_VALUE); 

вы получите

9223372036854775807 

ваши ценности гораздо больше

9999999999999999999999999988888888888 

поэтому способ заключается в использовании BigDecimal

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

дает

9999999999999999999999999977777777776000000000000000
Смежные вопросы