gpt4 book ai didi

java - 数字乘以字符串

转载 作者:行者123 更新时间:2023-12-01 22:28:15 25 4
gpt4 key购买 nike

为什么从n1.charAt(i)n2.charAt(j)中减去‘0’

问题:给定两个用字符串表示的数字,将数字的乘积作为字符串返回。

public String multiply(String num1, String num2) {
String n1 = new StringBuilder(num1).reverse().toString();
String n2 = new StringBuilder(num2).reverse().toString();

int[] d = new int[num1.length()+num2.length()];

//multiply each digit and sum at the corresponding positions
for(int i=0; i<n1.length(); i++){
for(int j=0; j<n2.length(); j++){
d[i+j] += (n1.charAt(i)-'0') * (n2.charAt(j)-'0');
}
}

StringBuilder sb = new StringBuilder();

//calculate each digit
for(int i=0; i<d.length; i++){
int mod = d[i]%10;
int carry = d[i]/10;
if(i+1<d.length){
d[i+1] += carry;
}
sb.insert(0, mod);
}

//remove front 0's
while(sb.charAt(0) == '0' && sb.length()> 1){
sb.deleteCharAt(0);
}

return sb.toString();
}

最佳答案

它正在计算(通过减法)字符的数值。字符常量 0 也是数字 0。考虑 char 值“0”到“9”的循环也可以作为 int 完成。

for (char ch = '0'; ch <= '9'; ch++) {
System.out.print(ch);
System.out.print(" = " );
System.out.println((int) ch);
}

for (int ch = '0'; ch <= '9'; ch++) {
System.out.print((char) ch);
System.out.print(" = " );
System.out.println(ch);
}

这(两者)证明了 ascii code (技术上是 Unicdoe,但该技术早于 Unicode)数字值

0 = 48
1 = 49
2 = 50
3 = 51
4 = 52
5 = 53
6 = 54
7 = 55
8 = 56
9 = 57

另见 Character.digit(char, int)它返回 指定基数中字符 ch 的数值。 这意味着您可以替换

d[i + j] += (n1.charAt(i) - '0') * (n2.charAt(j) - '0');

d[i + j] += Character.digit(n1.charAt(i), 10)
* Character.digit(n2.charAt(j), 10);

当然,该方法可以通过调用 Java 内置的任意精度类型 BigInteger 来实现,您可以使用 BigInteger.multiply(BigInteger)喜欢

return new BigInteger(num1).multiply(new BigInteger(num2)).toString();

关于java - 数字乘以字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30930329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com