牛客:大加法数
文章目录
- 一、读题
- 二、思路
- 问题:
- 解决思路:
- 三、代码实现:
一、读题
题目来源:
https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475?tpId=196&tqId=37176&ru=/exam/oj
大加法数
二、思路
将String类型的数字进行相加,并以String类型返回,本质上就是模拟,将字符串模拟数字加法的过程,我们只需要将字符串模拟小学加法即可
问题:
我们需要关注怎么把字符串拆出来,并且后面应该怎么把计算结果组织起来,其次就是怎么处理进位的问题
解决思路:
处理进位是最简单的,我们只需要设置一个变量初始化为0,假设在各位相加的时候同时也加这个变量,如果相加结果大于10,那么就模10,然后把结果赋值给这个变量
拆位是最简单的,只需要通过String的charAt方法即可拿到字符串的某一位
组织结果,因为我们是从右边往左边加,因此最终得到的结果是逆序的,因此我们可以使用StringBuilder来组织结果,利用append方法添加位数,然后再通过reverse方法逆置
还需要注意一点,通过charAt()拿到的每一位是char类型的,我们需要将char类型转换位int类型的才可以进行计算
char类型是可以进行计算的,因为我们Java使用的字符集是Unicode,Unicode是支持世界上任何语言的字符,因此当我们拿到任意一个数字的字符类型,只需要减字符0即可将char类型的数字转换为interesting类型
三、代码实现:
import java.util.*;public class Solution {public String solve (String s, String t) {StringBuilder str = new StringBuilder();if(s == "") return t;if(t == "") return s;int sl = s.length() - 1;int tl = t.length() - 1;int flag = 0;while(sl >= 0 || tl >= 0 || flag == 1) {if(sl >= 0) flag += s.charAt(sl--) - '0';if(tl >= 0) flag += t.charAt(tl--) - '0';// str.append((char)(flag % 10 + '0'));str.append(flag%10);flag /= 10;}return str.reverse().toString();//记得最后一定要掉用reverse()进行逆序}
}