zoukankan      html  css  js  c++  java
  • leetcode刷题42

    今天刷的题是LeetCode43题,这个题是给定两个字符串,求乘积

    具体地,我的代码就是根据乘法思路来做的,末位补零来解决高低位的问题

    public class Multiply_43_middle {
        public static void main(String[] args) {
            System.out.println(solution("9133","0"));
        }
        public static String solution(String num1,String num2){
            int n=num1.length();
            StringBuilder stringBuilder=new StringBuilder();//保存的是结果
            for (int i = n-1; i >=0 ; i--) {
                int multiplier=Integer.parseInt(String.valueOf(num1.charAt(i)));
                int j=num2.length()-1;
                int pre=0;//保存需要进位的数
                StringBuilder stringBuilder1=new StringBuilder();
                for (int k = 0; k <n-1-i ; k++) {
                    stringBuilder1.append(0);
                }
                while (j>=0){
                    int antherNum=Integer.parseInt(String.valueOf(num2.charAt(j)));//另一个乘数
                    int product=pre+antherNum*multiplier;//计算两个数的乘积
                    pre=product/10;//计算进位的数
                    product=product%10;//除去进位的数之后,个位数
                    stringBuilder1.insert(0,product);
                    j--;
                }
                if (pre!=0){
                    stringBuilder1.insert(0,pre);
                }
                //接下来需要把stringbuilder1添加到stringbuilder中
                stringBuilder=add(stringBuilder,stringBuilder1);
            }
            if (Integer.parseInt(String.valueOf(stringBuilder.toString().charAt(0)))==0)return "0";
            else return stringBuilder.toString();
        }
        public static StringBuilder add(StringBuilder string1,StringBuilder string2){
            int pre=0;
            StringBuilder result=new StringBuilder();
            for (int i = string2.length()-1; i >=0 ; i--) {
                if (string2.length()==string1.length()){
                    int num1=Integer.parseInt(String.valueOf(string1.toString().charAt(i)));
                    int num2=Integer.parseInt(String.valueOf(string2.toString().charAt(i)));
                    int sum=num1+num2+pre;
                    pre=sum/10;
                    result.insert(0, String.valueOf(sum%10));
                }else if (string2.length()<string1.length()){
                    int difference=string1.length()-string2.length();
                    int num1=Integer.parseInt(String.valueOf(string1.toString().charAt(i+difference)));
                    int num2=Integer.parseInt(String.valueOf(string2.toString().charAt(i)));
                    int sum=num1+num2+pre;
                    pre=sum/10;
                    result.insert(0, String.valueOf(sum%10));
                }else {
                    //string2.length>string1.length
                    int difference=string2.length()-string1.length();
                    int num1=0;
                    if (i-difference>=0){
                        num1=Integer.parseInt(String.valueOf(string1.toString().charAt(i-difference)));
                    }
                    int num2=Integer.parseInt(String.valueOf(string2.toString().charAt(i)));
                    int sum=num1+num2+pre;
                    pre=sum/10;
                    result.insert(0,String.valueOf(sum%10));
                }
            }
            if (pre!=0)result.insert(0,pre);
            return result;
        }
    }

  • 相关阅读:
    Docker-常用命令
    5分钟了解折半插入排序
    Spring框架之IOC原理
    使用JS实现简单喷泉效果
    坦克大战系列6-API常用函数说明1
    坦克大战系列6-API常用函数说明2
    为什么要使用-Docker
    SQL语言:存储过程
    使用原生JS重构简单的音乐播放器
    [区间DP]ZOJ3541 The Last Puzzle
  • 原文地址:https://www.cnblogs.com/cquer-xjtuer-lys/p/11603580.html
Copyright © 2011-2022 走看看