12 / 10 / 5
Регистрация: 27.08.2015
Сообщений: 236
1

Суммирование двух чисел типа String / Не вижу ошибку

27.08.2015, 11:04. Показов 641. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток.
Целью программы является прием 2-х чисел типа String и возвращение их суммы тоже в виде типа String. Суммировать она должна их столбиком, то есть последнее с последним и с переносом остатка.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
    private String addStrings(String n1, String n2) {
        String res = "";
        int i = n1.length()-1;
        int j = n2.length()-1;
        int rest = 0;
        int value1 = 0;
        int value2 = 0;
        int loop;
        int a = 0;
        int b = 0;
 
        if (i>j){
            loop = i;
        } else {
            loop = j;
        }
 
        while(loop !=-1){
 
            char c1 = n1.charAt(i - a);
            char c2 = n2.charAt(j - b);
            if (i-a>=0) {
                value1 = c1 - '0';
                a++;
            }else{
                value1 = 0;
            } if (j-b>=0) {
                value2 = c2 - '0';
                b++;
            }else{
                value2 = 0;
            }
            int sumInt = value1 + value2 + rest;
            if(sumInt > 9){
                rest = 1;
                sumInt = sumInt - 10;
            } else {
                rest = 0;
            }
            int sumFinal = sumInt;
            char ch = (char)(sumFinal + '0');
            res += ch;
            loop--;a++;b++;
        }
        String result = new StringBuffer(res).reverse().toString();
        return result;
    }
}
До добавления условий

Java
1
2
3
4
5
6
7
8
if (i-a>=0) {
                value1 = c1 - '0';
                a++;
            }else{
                value1 = 0;
            } if (j-b>=0) {
                value2 = c2 - '0';
                b++;
и когда было
Java
1
2
  char c1 = n1.charAt(loop);
            char c2 = n2.charAt(loop);
То работало все правильно, но только если у двух чисел одинаковое количество цифр. Решил это исправить,но теперь все равно не работает должным образом(взрывается при вводе чисел в которых более 2-х цифр) и не могу понять в чем проблема...
Буду очень благодарен если кто подскажет где она.

UPD: так же проблемма при вводе например 500 и 500. Должно выдавать "1000", но показывает столько цифр,сколько в вводимом числе, т.е. отображает "000".
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2015, 11:04
Ответы с готовыми решениями:

Суммирование двух столбцов чисел
Пожалуйста помогите сделать задание по операционным системам. Разработать и выполнить командный...

Сравнение двух переменных типа string
Я решаю одну задачу, в ней нужно сделать бинарное дерево поиска, но суть не в это. При поиске по...

Проверяет суммирование двух целых чисел на переполнение
Составить программу, которая проверяет, не приводит ли суммирование двух целых чисел А и В к...

Суммирование первых найденных чисел двух диапазонов
Привет всем! Подскажите, плз, формулу, которая может возвращать первое найденное _любое число_ в...

7
65 / 64 / 15
Регистрация: 15.12.2013
Сообщений: 166
27.08.2015, 12:21 2
JavJun, если убрать внизу a++;b++; то работает

Добавлено через 13 минут
JavJun, наверно, не самый лучший вариант, но можно добавлять нули в строку, если они неравные по количеству цифр, например так.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
public static void main (String args[]) {
        Main m = new Main();
        System.out.println(m.addStrings("11511","24"));
        
    }
 
     private String addStrings(String n1, String n2) {
            String res = "";
            int i = n1.length()-1;
            int j = n2.length()-1;
            int rest = 0;
            int value1 = 0;
            int value2 = 0;
            int loop;
            int a = 0;
            int b = 0;
            int diff = Math.abs(i - j);
            String zero = "";
            
            if (diff != 0) while(diff > 0) { zero += "0"; diff--;}
            
            if( i < j) {
                n1 = zero.concat(n1); i = j;
            } else if( i > j) {
                n2 = zero.concat(n2); j = i;
            }
                
 
            if (i>j){
                loop = i;
            } else {
                loop = j;
            }
     
            while(loop !=-1){
     
                char c1 = n1.charAt(i - a);
                char c2 = n2.charAt(j - b);
                if (i-a>=0) {
                    value1 = c1 - '0';
                    a++;
                }else{
                    value1 = 0;
                } if (j-b>=0) {
                    value2 = c2 - '0';
                    b++;
                }else{
                    value2 = 0;
                }
                int sumInt = value1 + value2 + rest;
                if(sumInt > 9){
                    rest = 1;
                    sumInt = sumInt - 10;
                } else {
                    rest = 0;
                }
                int sumFinal = sumInt;
                char ch = (char)(sumFinal + '0');
                res += ch;
                loop--;
            }
            String result = new StringBuffer(res).reverse().toString();
            return result;
        }
Вывод : 11535
1
12 / 10 / 5
Регистрация: 27.08.2015
Сообщений: 236
27.08.2015, 14:34  [ТС] 3
Эрнесто, большое спасибо. Чуть доработаю и будет то что нужно.
Осталась теперь только проблема с 999+1=000...может знаете как сделать что бы в таких случаях был дополнительных символ?
0
59 / 60 / 37
Регистрация: 24.07.2015
Сообщений: 224
27.08.2015, 14:44 4
А так не проще -

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    private static String addStrings(String n1, String n2) {
        int dlinaPervogoCisla = n1.length() - 1; 
        int dlinaVtorogoCisla = n2.length() - 1;
        int maxDlina = Math.max(dlinaPervogoCisla,dlinaVtorogoCisla);
        String result = "";
        int chislo1, chislo2 = 0;
        for (int i = maxDlina; i >= 0 ; i--)
        {                   
            chislo1 = (dlinaPervogoCisla >= 0 ? n1.charAt(dlinaPervogoCisla)- '0' : 0);
            chislo2 = (dlinaVtorogoCisla >= 0 ? n2.charAt(dlinaVtorogoCisla)- '0' : 0);
            dlinaPervogoCisla--;
            dlinaVtorogoCisla--;
            result =  chislo1 + chislo2+ result;
        }
        return result;
    }
0
12 / 10 / 5
Регистрация: 27.08.2015
Сообщений: 236
27.08.2015, 14:53  [ТС] 5
Arik100, может и проще, но считает не правильно:
350 + 350 = 6100
465 + 687 = 101412
...
0
65 / 64 / 15
Регистрация: 15.12.2013
Сообщений: 166
27.08.2015, 16:00 6
JavJun, можно с помощью регулярных выражений, в конце
Java
1
2
3
 
String result = new StringBuffer(res).reverse().toString();
if(result.matches("0.*")) result = "1" + result;
1
59 / 60 / 37
Регистрация: 24.07.2015
Сообщений: 224
27.08.2015, 16:02 7
гранд пардон

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private static String addStrings(String n1, String n2) {
        int dlinaPervogoCisla = n1.length() - 1; 
        int dlinaVtorogoCisla = n2.length() - 1;
        int maxDlina = Math.max(dlinaPervogoCisla,dlinaVtorogoCisla);
        String result = "";
        int chislo1, chislo2, chisloEdinici, chisloDesiatki  = 0;
        for (int i = maxDlina; i >= 0 ; i--)
        {                   
            chislo1 = (dlinaPervogoCisla >= 0 ? n1.charAt(dlinaPervogoCisla)- '0' : 0);
            chislo2 = (dlinaVtorogoCisla >= 0 ? n2.charAt(dlinaVtorogoCisla)- '0' : 0);
            dlinaPervogoCisla--;
            dlinaVtorogoCisla--;
            chisloEdinici = (int) (chislo1 + chislo2+ chisloDesiatki) % 10;
            if(chislo1 + chislo2 +chisloDesiatki >= 10)
                result =  chisloEdinici  + result;
            else 
                result =  chislo1 + chislo2  + chisloDesiatki+ result;      
            chisloEdinici = 0;
            chisloDesiatki = (int) Math.floor((chislo1 + chislo2 + chisloDesiatki)/10);
        }
        if (chisloDesiatki > 0) result =  chisloDesiatki+ result;   
        return result;
    }
1
12 / 10 / 5
Регистрация: 27.08.2015
Сообщений: 236
27.08.2015, 16:39  [ТС] 8
Arik100, большое спасибо.
0
27.08.2015, 16:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.08.2015, 16:39
Помогаю со студенческими работами здесь

Суммирование двух чисел разных пользователей и сравнение с 1
У меня есть таблица, в которой хранятся данные ответов пользователей на анкетные вопросы. В этой...

Определить, не приводит ли суммирование двух целых чисел А и В к переполнению
Составить программу, которая проверяла бы, не приводит ли суммирование двух целых чисел А и В к...

Составьте программу, организующую ввод, суммирование и вывод двух чисел
Составить программу с помощью процедур Procedure Написать программу состоящую из 3х процедур и...

Длинная арифметика: суммирование двух введенных пользователем больших чисел
решите задачку: пользователь вводит 2 больших числа (числа от -1*2^127 до 1*2^127-1). Написать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru