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

题目描述

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

(字符串长度不大于100000,保证字符串仅由'0'~'9'这10种字符组成)

示例1

输入

"1","99"

返回值

"100"

说明

1+99=100 

 

Ascii码表参照:看十进制列和字符列 可以看到字符的'0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 对应的十进制数字,可以得知在针对字符数字的情况下,如:

public static void main(String[] args) {

    char a = '1';
    char b = '2';
    int k = b - a;
    System.out.println(k);


}

结果相当于每个字符转换为十进制后,进行差值的运算 相当于50-49=1

八进制十六进制十进制字符八进制十六进制十进制字符
00000nul1004064@
01011soh1014165A
02022stx1024266B
03033etx1034367C
04044eot1044468D
05055enq1054569E
06066ack1064670F
07077bel1074771G
10088bs1104872H
11099ht1114973I
120a10nl1124a74J
130b11vt1134b75K
140c12ff1144c76L
150d13cr1154d77M
160e14so1164e78N
170f15si1174f79O
201016dle1205080P
211117dc11215181Q
221218dc21225282R
231319dc31235383S
241420dc41245484T
251521nak1255585U
261622syn1265686V
271723etb1275787W
301824can1305888X
311925em1315989Y
321a26sub1325a90Z
331b27esc1335b91[
341c28fs1345c92\
351d29gs1355d93]
361e30re1365e94^
371f31us1375f95_
402032sp1406096'
412133!1416197a
422234"1426298b
432335#1436399c
442436$14464100d
452537%14565101e
462638&14666102f
472739`14767103g
502840(15068104h
512941)15169105i
522a42*1526a106j
532b43+1536b107k
542c44,1546c108l
552d45-1556d109m
562e46.1566e110n
572f47/1576f111o
603048016070112p
613149116171113q
623250216272114r
633351316373115s
643452416474116t
653553516575117u
663654616676118v
673755716777119w
703856817078120x
713957917179121y
723a58:1727a122z
733b59;1737b123{
743c60<1747c124|
753d61=1757d125}
763e62>1767e126~
773f63?1777f127del

 

 

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    public String solve (String s, String t) {
        
        if(s==null && t!=null){
            return t;
        }
        
        if(s!=null && t==null){
            return s;
        }
        
        if(s==null && t==null){
            return null;
        }
        
        char[] a = s.toCharArray();
        char[] b = t.toCharArray();
        
        //因为涉及到最后2位相加的进位问题 所以可能多出1位长度
        char[] result = new char[Math.max(a.length,b.length) + 1];
        int resultLen = result.length - 1;
        int aLenIndex = a.length-1;
        int bLenIndex = b.length-1;
        
        int jinwei = 0;
        while(aLenIndex>=0 && bLenIndex>=0){
            //字符0-9减法对应ascii,用其ascii对应的十进制,减法后,得到的结果为int类型
            //如字符'1'对应49  '2'对应50 '2' - '1' = 1
            int A = a[aLenIndex--] - '0';//相当于'1' - '0' = 49 - 48 = 1
            int B = b[bLenIndex--] - '0';//相当于'2' - '0' = 50 - 48 = 2
            
            //转换为字符存储在char[]中
            result[resultLen--] = (char)((A+B+jinwei)%10 + '0');
            jinwei = (A+B+jinwei)/10;
        }
        
        while(aLenIndex>=0){
            int A = a[aLenIndex--] - '0';
            result[resultLen--] = (char)((A+jinwei)%10 + '0');
            jinwei = (A+jinwei)/10;
        }
        
        while(bLenIndex>=0){
            int B = b[bLenIndex--] - '0';
            result[resultLen--] = (char)((B+jinwei)%10 + '0');
            jinwei = (B+jinwei)/10;
        }
        
        if(jinwei!=0){
            result[resultLen] = (char)(jinwei + '0');
            //此时char[]数组 填满,直接返回
            return String.valueOf(result);
        }
        
        //最后的2个数相加 没有涉及进位 所以截取char[]数组的第一位到末位返回
        return String.valueOf(result).substring(1);
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值