умножение строк - PullRequest
       1

умножение строк

3 голосов
/ 15 декабря 2010

Я пытаюсь умножить две строки, но получаю неправильный ответ.Любая помощь будет оценена:

public class stringmultiplication {
    public static void main(String[] args) {
        String s1 = "10";
        String s2 = "20";
        int num = 0;
        for(int i = (s1.toCharArray().length); i > 0; i--)
            for(int j = (s2.toCharArray().length); j > 0; j--)
                num = (num * 10) + ((s1.toCharArray()[i - 1] - '0') * (s2.toCharArray()[j - 1] - '0'));
        System.out.println(num);
    }
}

Ответы [ 4 ]

3 голосов
/ 15 декабря 2010
public static void main(String[] args) {
        String number1 = "108";
        String number2 = "84";

        char[] n1 = number1.toCharArray();
        char[] n2 = number2.toCharArray();

        int result = 0;

        for (int i = 0; i < n1.length; i++) {
            for (int j = 0; j < n2.length; j++) {
                result += (n1[i] - '0') * (n2[j] - '0')
                        * (int) Math.pow(10, n1.length + n2.length - (i + j + 2));
            }
        }
        System.out.println(result);
    }

Это должна быть правильная реализация без использования целых чисел.

2 голосов
/ 15 декабря 2010

Вы умножаете числа на цифры и неправильно обрабатываете числа 10.

Вам нужно сначала разобрать строки в целые числа. Вы на правильном пути здесь. Вы можете упростить индексы цикла, и вам нужно будет вызвать toCharArray только один раз. E.g.:

После разбора вы можете умножить целые числа.

РЕДАКТИРОВАТЬ: Если это не разрешено, вам нужно реализовать алгоритм, подобный , этот , который немного сложнее.

Один из подходов заключается в создании массива (n + 1) x (m + n) (строго массив массивов), где m и n - количество цифр в каждом. Он будет инициализирован в 0, и вы можете использовать его как область для размещения строк немедленных и окончательных результатов. Затем они суммируются с переносом. Это, очевидно, наивный алгоритм.

например. для примера выше:

int[][] intermediates = new int[3][4];

Это верхняя граница.

1 голос
/ 15 декабря 2010

Ниже приводится решение, которое я предлагаю. То, что вы забыли сделать, - это сохранить промежуточное значение.

public class T{  
    public static void main(String[] args) {     

        char[] num1 = "127".toCharArray();     
        char[] num2 = "32".toCharArray();

        int[] intermediate = new int[num1.length];

        for (int i = 0 ; i < num1.length ; i++ )  { 

                for(int j = 0 ; j < num2.length ; j++ ) { 


                  int d1 = num1[num1.length - i - 1]-'0';
                  int d2 = num2[num2.length - j - 1]-'0';


                  intermediate[i] += d1 * d2 * (int) Math.pow(10,j);

                  System.out.printf("  %d X %d = %d\n", d1, d2, intermediate[i]);

                }     

             intermediate[i] *= (int) Math.pow(10,i);

             System.out.println(" intermediate : " + intermediate[i]);
        }     


        int sum = 0;

        for(int i : intermediate) {
            sum += i;
        }

        System.out.println("Sum is = " + sum); 
    }
} 
0 голосов
/ 22 января 2015

Мне показалось, что алгоритм Питера, использующий функцию pow, немного сбивает с толку. Здесь по сути тот же алгоритм. Конвертируйте ваши строки в char [] и запускайте это.

public static int multiply (char A[], char B[]){
		int totalSum = 0, sum = 0;
		for (int i = 0; i < A.length; i++){
			sum = 0;

			for (int j = 0; j < B.length; j++){
				sum *= 10;
				sum += (A[i] - '0') * (B[j] - '0');
				
			}
			totalSum *=10;
			totalSum += sum;
		}

		return totalSum;
	}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...