我正在尝试从维基百科实现Karatsuba算法,但由于不知道如何将一个整数拆分为较低部分和较高部分,因此无法继续编码。例如,如果我们有一个整数223,则应将其拆分为两个整数22和3。
我该怎么做呢?
因此,它必须是以下内容:
num1 = 223;
这里发生了一些神奇的事情!
low1 = 22;
low2 = 3;
非常感谢您的帮助!我真的非常感激!
我正在尝试从维基百科实现Karatsuba算法,但由于不知道如何将一个整数拆分为较低部分和较高部分,因此无法继续编码。例如,如果我们有一个整数223,则应将其拆分为两个整数22和3。
我该怎么做呢?
因此,它必须是以下内容:
num1 = 223;
这里发生了一些神奇的事情!
low1 = 22;
low2 = 3;
low1 = num1 / 10;
low2 = num1 % 10;
以下是您尝试完成的要点。我不熟悉算法和您具体要做的事情,因此几乎肯定需要额外的逻辑,但这是一个很好的起点。
%
)从数字中提取位数。例如:12345 % 10 = 5
12345 % 100 = 45
12345 % 1000 = 345
希望这能帮到你。等等。
int num1 = 223;
int num2 = num1%10;
在这种情况下,num2 = 3
%2
并不返回最后一个数字(它只能返回0
或1
)。而“remove out”这个短语呢?原始数字保持不变。 - nhgrif我建议使用以下算法来拆分整数:
int i = 233678546; /* The integer you would like to split */
int digitNumber = String.valueOf(i).length(); /* use java.math.Math.log10 if you need a more mathematical approach */
double val = Math.pow(10.0, (double)(digitNumber / 2));
int div = new Double(val).intValue();
int left = i / div;
int right = i % div;
StringBuilder sb = new StringBuilder();
sb.append("Value : ");
sb.append(i);
sb.append('\n');
sb.append("Left : ");
sb.append(left);
sb.append('\n');
sb.append("Right : ");
sb.append(right);
sb.append('\n');
System.out.println(sb.toString());