字符串乘法

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

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

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

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

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

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

解析后,您可以乘以整数。

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

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

例如,上面的例子:

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

这是一个上限。

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

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

我发现使用pow函数的Peter算法有点令人困惑。 这基本上是相同的算法。 将你的字符串转换为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; }