为什么从'0'
和n1.charAt(i)
减去n2.charAt(j)
?
问题:给定两个数字表示为字符串,将数字作为字符串返回乘法。
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 :(得分:3)
计算(通过减法)字符的数值。字符常量0
也是数字0
。考虑一个char
值&#39; 0&#39;到&#39; 9&#39;也可以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();
答案 1 :(得分:2)
从包含数字的字符中减去“0”,可以得到该字符的数值。
例如,'9' - '0'给出整数9。
原因是数字字符('0'到'9')的整数值从48到57,所以'9' - '0'相当于57 - 48,这给你9。 / p>
答案 2 :(得分:2)
为什么从n1.charAt(i)和n2.charAt(j)中减去'0'?
因为表示数字0的Unicode字符数是48,而不是0。
想象一下你想要标记'A'=&gt; 0,'B'=&gt; 1等...然后你用
n1.charAt(i) - 'A'
等......但是当它发生时,我们想要'0'=&gt; 0,'1'=&gt; 1等,所以我们减去'0'。你需要区分“值int
”和“角色,char
”(后者仍然有数字值,但它不是你可能期望的那样) )。
答案 3 :(得分:0)
当一个字符存储在一个整数中时,它会被转换为它存储的相应ASCII
值。
现在的ASCII值为:
'0' (zero as character) is -> 48
'1' (one as character ) is -> 49
......................
and so on...
现在,我们怎样才能从角色中获取整数?
很容易从所有数字字符中减去48
,这是'0'
的ASCII