每日一题: NC1 大数加法

转自牛客网
:https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475?tpId=196&tqId=37176&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196&difficulty=undefined&judgeStatus=undefined&tags=&title=

描述
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。

数据范围:s.length,t.length≤100000s.length,t.length \le 100000s.length,t.length≤100000,字符串仅由’0’~‘9’构成
要求:时间复杂度 O(n)O(n)O(n)

public String solve(String s, String t) {
       //如果有一方为空字符串,直接返回另外一个字符串
        if (s.length()<= 0) {
            return t;
        }
        if (t.length() <=0) {
            return s;
        }
			 //交换字符串 ,使得s为较为长的字符串
        if(s.length()<t.length()){
            String temp = s;
            s = t;
            t = temp;
        }
        //增加变量存储进位
        int carry = 0;
				//用来装两个字符串的结果
        char[] newNum = new char[s.length()];
        //从低位依次向高位获取  低位数字从str.leng-1开始
        for (int i = s.length() - 1; i >= 0; i--) {

            //低位先加,加上进位的数。
            //这里的-'0'是将 ascii 相减。获得的值正好是 对应的数字
            int temp = s.charAt(i) - '0' + carry;

					 //画图可以发现,获取到的是从较短的最后一位,逐渐往前推移的数字下标
            int shortStringIndex = i - s.length() + t.length();
     
            if(shortStringIndex>=0){
                temp = t.charAt(shortStringIndex) - '0' +temp;
            }
					 //除法获取进位
            carry = temp /10;
					 //取余获得个位
            temp = temp % 10;

//					 从后往前添加字符
            newNum[i] = (char)(temp +'0');
        }

        String output = String.valueOf(newNum);
      //  如果i>=0不符合条件,上一轮的carry(进位)又是 1的话,这里需要额外处理
        if(carry==1){
            output = '1' +output;
        }
        return output;
    }

收获:
1.char -》int 转换 == char - ‘0’
2.从加法的原理来考虑 —》 从原理考虑问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值