题解 | #数组中的最长连续子序列#

大数乘法

http://www.nowcoder.com/practice/c4c488d4d40d4c4e9824c3650f7d5571

先写个单数位的乘法,再把所有的结果错位后加起来

/*
@v7fgg
运行时间:224ms超过0.41% 用Java提交的代码
占用内存:19564KB超过3.76%用Java提交的代码
2022年2月12日 12:01
*/
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.equals("0")||t.equals("0")){return "0";}
        String ans="0";
        StringBuilder sb=new StringBuilder(t);
        for(int i=0;i<s.length();i++){
            char c=s.charAt(s.length()-1-i);            
            if(i>0){sb.append("0");}
            ans=add(ans,multiplyOneDigit(c,sb.toString()));
        }
        return ans;
    }
    public String multiplyOneDigit(char c,String s){
        if(c=='0'){return "0";}
        int k=c-'0';
        int carry=0;
        StringBuilder ans=new StringBuilder();
        for(int i=s.length()-1;i>=0;i--){
            int sum=carry+k*(s.charAt(i)-'0');
            ans.append(sum%10);
            carry=sum/10;
        }
        if(carry>0){ans.append(carry);}
        return ans.reverse().toString();
    }
    public String add(String s,String t){
        if(s.length()<=t.length()){
            StringBuilder ans=new StringBuilder();
            int carry=0,i=s.length()-1,j=t.length()-1;
            while(i>=0){
                int sum=s.charAt(i)+t.charAt(j)-2*'0'+carry;
                ans.append(sum%10);
                carry=sum/10;
                i--;
                j--;
            }
            while(j>=0){
                int sum=t.charAt(j)-'0'+carry;
                ans.append(sum%10);
                carry=sum/10;
                j--;
            }
            if(carry==1){ans.append("1");}
            return ans.reverse().toString();
        }
        return add(t,s);
    }
}
全部评论

相关推荐

02-01 12:05
复旦大学 Java
腾讯的提前批大概率应该是没有笔试的,但是这个时候有相当部分的同学简历估计都没有准备好,没准备好的同学也不用急,大部分都是3月之后开,这个时候开的绝大多数都是神仙打架,问的东西也比较难,打算投递的同学也多看下计算机网络和操作系统,腾讯对这部分的知识问的比较多。另外多刷下牛客的热门题库,刷题注意刷ACM模式,和牛客的周赛题,腾讯有的部门会从这里面出原题。我是@程序员花海关注我,带你了解更多校招资讯!
程序员花海:还没有来得及准备的同学可以看下学习路线:https://www.nowcoder.com/discuss/824693499982315520?sourceSSR=users算法题:https://www.nowcoder.com/feed/main/detail/20e7a999fa04485b88340a274411ca0d?sourceSSR=users八股文:https://www.nowcoder.com/discuss/833102362771251200?sourceSSR=users简历书写方式:https://www.nowcoder.com/discuss/839907820706205696?sourceSSR=users都是以前在牛客发的文章~
软开人,秋招你打算投哪些...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务