Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm Karatsuba算法_Algorithm_Recursion_Biginteger_Multiplication_Karatsuba - Fatal编程技术网

Algorithm Karatsuba算法

Algorithm Karatsuba算法,algorithm,recursion,biginteger,multiplication,karatsuba,Algorithm,Recursion,Biginteger,Multiplication,Karatsuba,当我运行我的程序时,我总是遇到这些错误,有人能发现错误吗?我没有使用递归的经验,可能把基本情况弄糟了。我的测试由两个长度相同的数字组成,我的目标是在不使用内置类的情况下将两个大数字相乘。add方法只接收两个字符串,它们是数字并将它们相加,我检查了它们,无论数字有多大,它都能工作 输入字符串的错误编号格式异常:“” parseInt(Integer.java:592) 公共静态字符串mu(字符串值1,字符串值2){ int length1=value1.length(); int length2=

当我运行我的程序时,我总是遇到这些错误,有人能发现错误吗?我没有使用递归的经验,可能把基本情况弄糟了。我的测试由两个长度相同的数字组成,我的目标是在不使用内置类的情况下将两个大数字相乘。add方法只接收两个字符串,它们是数字并将它们相加,我检查了它们,无论数字有多大,它都能工作

输入字符串的错误编号格式异常:“” parseInt(Integer.java:592)

公共静态字符串mu(字符串值1,字符串值2){
int length1=value1.length();
int length2=value2.length();
//如果一个值的位数比另一个多,请在前面加零。。。
int temp1;
int temp2;
整数乘;
如果(长度1==1 | |长度2==1){
temp1=Integer.parseInt(值1);
temp2=Integer.parseInt(value2);
乘法=temp1*temp2;
返回乘法+“”;
}else if(长度1==0 | |长度2==0){
返回“”;
}
int firstHalf=长度1/2;
int secondHalf=长度1-上半部分;
字符串value1First=value1.子字符串(0,前半部分);
字符串值1second=value1.子字符串(前半部分、后半部分);
字符串value2First=value2.子字符串(0,前半部分);
字符串值2秒=值2.子字符串(前半部分,后半部分);
字符串ac=mu(value1First,value2First);
字符串ad=mu(值1第一,值2第二);
字符串bc=mu(值1秒,值2first);
字符串bd=mu(值1秒,值2秒);
字符串zerostoadd=null;
字符串zeroesToAdd2=null;
对于(int i=0;i
输入字符串的错误编号格式异常:“”
parseInt(Integer.java:592)

是由代码引起的

Integer.parseInt(value1)  or
Integer.parseInt(value2)
您可能希望尝试为str长度(1,1)(1,0)(0,1)(0,0)的组合添加更多事例。以下代码可能会有所帮助

if (length1==1 && length2 ==1){
    temp1 = Integer.parseInt(value1);
    temp2 = Integer.parseInt(value2);
    multiply = temp1*temp2;
    return multiply +"" ;
}else if (length1 ==0 && length2 ==0){
    return "";
}
else if (length1 ==0 && length2 ==1){
    return value2;
}
else if (length1 ==1 && length2 ==0){
    return value1;
}

希望能有所帮助!

我一直得到的这些错误是一个绝对无用的问题描述。您具体得到了什么错误?线程“main”中的异常java.lang.NumberFormatException:For input string:“”位于java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)位于java.lang.Integer.parseInt(Integer.java:592)main.mu(main.java:139)的java.lang.Integer.parseInt(Integer.java:615)和main.mu(main.java:159)的main.main(main.java:304)如果其中一个长度为1,您将永远无法到达检查长度为0的部分。请先执行该检查并返回空字符串。然后,在代码的其余部分中,您将永远不会再遇到长度为0的问题。当然,您也可以直接使用BigInteger。这将使用Karatsuba来表示大值如果一个值为空,而另一个值的长度为1,则返回另一个值:为什么将空字符串解释为1而不是零?
if (length1==1 && length2 ==1){
    temp1 = Integer.parseInt(value1);
    temp2 = Integer.parseInt(value2);
    multiply = temp1*temp2;
    return multiply +"" ;
}else if (length1 ==0 && length2 ==0){
    return "";
}
else if (length1 ==0 && length2 ==1){
    return value2;
}
else if (length1 ==1 && length2 ==0){
    return value1;
}