我试图将两个字符串相乘,但我得到了错误的答案。任何帮助将不胜感激:
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);
}
}
答案 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;
}