Java 作为字符串的数字乘法
为什么从Java 作为字符串的数字乘法,java,Java,为什么从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
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();
}
公共字符串乘法(字符串num1、字符串num2){
字符串n1=新的StringBuilder(num1).reverse().toString();
字符串n2=新的StringBuilder(num2).reverse().toString();
int[]d=新的int[num1.length()+num2.length()];
//将每个数字相乘,并在相应位置求和
for(int i=0;i从包含数字的字符中减去“0”可以得到该字符的数值
例如,“9”-“0”给出整数9
原因是数字字符('0'到'9')具有48到57之间的整数值,因此'9'-'0'相当于57-48,即9
为什么从n1.字符(i)和n2.字符(j)中减去“0”
因为表示数字0的Unicode字符的数字是48,而不是0
假设您想标记'A'=>0,'B'=>1等等,然后您会使用
n1.charAt(i) - 'A'
等等…但实际上,我们想要'0'=>0,'1'=>1等等,所以我们减去'0'。你需要区分“值,作为int
”和“字符,作为char
”(后者仍然有一个数值,但它不是你期望的值)。它正在计算(通过减法)字符的数值。字符常量<代码> 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);
}
另请参见以指定的基数返回字符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内置的任意精度类型biginger
来实现,您可以使用
当字符存储在整数中时,它将转换为相应的ASCII
存储值
现在,ASCII值为:
'0' (zero as character) is -> 48
'1' (one as character ) is -> 49
......................
and so on...
现在,我们如何从字符中得到整数
很容易从所有数字字符中减去48
,这是'0'
的ASCII码。试试这些:System.out.println((int)'0');
和System.out.println((int)'3');
,你就会明白了
d[i + j] += Character.digit(n1.charAt(i), 10)
* Character.digit(n2.charAt(j), 10);
return new BigInteger(num1).multiply(new BigInteger(num2)).toString();
'0' (zero as character) is -> 48
'1' (one as character ) is -> 49
......................
and so on...