NC1:大数加法
思路
- 将两个字符串转换为字符数组,以最长字符串的长度+1作为结果字符数组的长度
- 设置两个指针从数组的尾部进行遍历移动,将对应位置的数进行相加,取其个位数,并将进位保存下来
- 两个字符的相加减实际上是对应ASCII码的相加减,结果是一个整型
- 若两个字符串长度不同,没遍历完的继续加入到结果数组中,因为最高位没有进位,所以需要返回从索引1开始的字符串;
- 若两个字符串长度相同,需要判断最高位是否有进位,即判断保存的进位是否为零,有进位就加入到结果数组中
实现代码
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
public String solve (String s, String t) {
// write code here
if(s == null || t == null || s.length()==0 || t.length() == 0){
return "";
}
char[] chs = s.toCharArray();
char[] cht = t.toCharArray();
int slen = s.length()-1;
int tlen = t.length()-1;
int len = (slen > tlen ? slen : tlen)+1;
char[] res = new char[len+1];
int c = 0; //进位
while(slen>=0 && tlen>=0){
int a = chs[slen--] - '0';//两个字符相减实际上是ASCII码对应的数相减,结果是int类型
int b = cht[tlen--] - '0';
res[len--] = (char)((a+b+c)%10 + '0');//取个位
c = (a+b+c)/10;
}
while(slen >= 0){//chs未遍历完
int a = chs[slen--] - '0';
res[len--] = (char)((a+c)%10 + '0');
c = (a+c)/10;
}
while(tlen >= 0){//cht未遍历完
int b = cht[tlen--] - '0';
res[len--] = (char)((b+c)%10 + '0');
c = (b+c)/10;
}
if(c != 0){//chs与cht长度相等的情况,两数的最高位相加若有进位,也需要将其放进去
res[len] = (char)(c + '0');
return new String(res);
}
//最高位没有进位就返回从索引1开始的字符串
return String.valueOf(res).substring(1);
}
} NC10:大数乘法
题目地址:NC10:大数乘法
思路
都是将字符串转换为字符数组再进行处理,具体步骤如下
实现代码
public String solve (String s, String t) {
int len1 = s.length();
int len2 = t.length();
int[] nums1 = new int[len1];
int[] nums2 = new int[len2];
// 1.将字符串逐位放入整型数组
for(int i = 0; i < len1; i++){
nums1[i] = s.charAt(i) - '0';
}
for(int i = 0; i < len2; i++){
nums2[i] = t.charAt(i) - '0';
}
int[] result = new int[len1 + len2];
// 2. 逐位相乘放入结果数组
for(int i = 0; i < len1; i++){
for(int j = 0; j < len2; j++){
result[i + j] += nums1[i] * nums2[j];
}
}
// 3. 将结果数组中的元素从后往前进位
for(int k = result.length - 1; k > 0; k--){
result[k - 1] += result[k] / 10; //取十位上的数与前一位相加
result[k] = result[k] % 10; //将个位上的数存储在当前位置
}
// 4.拼接字符串
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0; i < result.length - 1; i++){
stringBuilder.append(result[i]);
}
return stringBuilder.toString();
}

京公网安备 11010502036488号