1、字符串相加
解题思路
- 循环遍历每一个元素
- 遍历两数 定义一个变量
- 相加 并 加上 可能存
- 取余 赋值给对应的位置
- 递减下标
- return结果
/**
* 解题思路
* 1、循环遍历每一个元素
* 2、遍历两数 定义一个变量接受 以charAt 截取的每一个字符 ('- 0' 因为该方法取出的值为ascii码 所以需要减去 字符'0' 获得对应的数值)
* 3、相加 并 加上 可能存在的进位标识
* 4、取余 赋值给对应的位置
* 5、递减下标
* 6、return结果
*/
public String addStrings(String num1, String num2) {
int n1 = num1.length() - 1;
int n2 = num2.length() - 1;
int flag = 0;
StringBuffer s = new StringBuffer();
while (n1 >= 0 || n2 >= 0 || flag != 0){
System.out.println(num1.charAt(n1));
int i = n1 >= 0 ? num1.charAt(n1) - '0' : 0;
int j = n2 >= 0 ? num2.charAt(n2) - '0' : 0;
int sum = i + j + flag;
s.append(sum % 10);
flag = sum / 10;
n1--;n2--;
}
return s.reverse().toString();
}
2、字符串相乘
解题思路
- 定义一个数组长度为 两数长度之和 (两数相乘的 '积’最大的长度为两数长度相加之和 )
- 遍历两数 定义一个变量接受 以charAt 截取的每一个字符 (‘- 0’ 因为该方法取出的值为ascii码 所以需要减去 字符’0’ 获得对应的数值)
- 相乘 并 加上 数组末尾可能已存在的元素
- 取余 赋值给对应的位置
- 取商 赋值给对应的位置
- 遍历数组 赋值return数值
public String multiply(String num1, String num2) {
/**
* 解题思路
* 1、定义一个数组长度为 两数长度之和 (两数相乘的 '积'最大的长度为两数长度相加之和 )
* 2、遍历两数 定义一个变量接受 以charAt 截取的每一个字符 ('- 0' 因为该方法取出的值为ascii码 所以需要减去 字符'0' 获得对应的数值)
* 3、相乘 并 加上 数组末尾可能已存在的元素
* 4、取余 赋值给对应的位置
* 5、取商 赋值给对应的位置
* 6、遍历数组 赋值return数值
*/
if (num1.equals("0") || num2.equals("0"))
return "0";
int [] nums = new int[num1.length() + num2.length()];
for (int i = num1.length()-1; i >= 0; i--) {
int n1 = num1.charAt(i) - '0';
for (int j = num2.length()-1; j >= 0; j--) {
int n2 = num2.charAt(j) - '0';
int sum = n1 * n2 + nums[i+j+1] ;
nums[i+j+1] = sum % 10;
nums[i+j] += sum / 10;
}
}
StringBuffer s = new StringBuffer();
int start = nums[0] == 0 ? 1 : 0;
for (int i = start; i < nums.length; i++){
s.append(nums[i]);
}
return s.toString();
}
此解法仅本人自己的思路,如有更优解,欢迎评论