字符串乘法

时间:2010-12-15 03:01:13

标签: java algorithm

我试图将两个字符串相乘,但我得到了错误的答案。任何帮助将不胜感激:

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 个答案:

答案 0 :(得分:3)

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);
    }

这个应该是正确的实现而不使用整数。

答案 1 :(得分:2)

你将数字乘以数字,而你没有正确处理10的幂。

您需要先将字符串解析为整数。你在这里走在正确的轨道上。您可以简化循环索引,只需调用toCharArray一次。 E.g:

解析后,可以乘以整数。

编辑:如果不允许,你需要实现像this one这样的算法,这有点复杂。

一种方法是制作一个(n + 1)x(m + n)数组(严格来说是一个数组数组),其中m和n是每个数组的位数。它将被初始化为0,您可以将其用作一个区域来放置即时和最终结果的行。然后将它们与进位相加。这显然是一种非常规的算法。

E.g。对于上面的例子:

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

这是一个上限。

答案 2 :(得分:1)

以下是我建议的解决方案,你忘记做的是保持中间值。

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); 
    }
} 

答案 3 :(得分:0)

我发现Peter的算法使用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;
	}