NC10题解 | #大数乘法#

大数乘法

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

参考了前面楼层的

346:对应数组[3,4,6] s
25: 对应数组[2,5] t
res[] = new int[5] = [0,0,0,0,0]
					 0,1,2,3,4
res[i+j+1] = s[i]*t[j]
比如:
res[4] = s[2]*t[1] = 6*5=30
res[3] = s[2]*t[0] +s[1]*t[1] = 6*2+4*5=32
依次类推...

代码:

import java.util.*;
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param s string字符串 第一个整数
     * @param t string字符串 第二个整数
     * @return string字符串
     */
    public String solve (String s, String t) {
        // write code here
        int lenS = s.length();
        int lenT = t.length();
        int[] ss = new int[lenS];
        int[] tt = new int[lenT];
        for(int i = 0; i < lenS; i++){
            ss[i] = s.charAt(i)-'0';
        }
        for(int j = 0; j < lenT; j++){
            tt[j] = t.charAt(j)-'0';
        }
        int[] res = new int[lenS+lenT];
        for(int i = 0; i < lenS; i++){
            for(int j = 0; j < lenT; j++){
                res[i+j+1] =  ss[i] * tt[j] + res[i+j+1];
            }
        }
        int carry = 0;
        for(int i = lenS+lenT-1; i >= 0; i--){
            res[i]+=carry;
            carry=res[i]/10;
            res[i] = res[i]%10;
        }
        //去掉前面的0 比如多个0000,要结果为0
        int cur = 0;
        while(cur < lenS+ lenT && res[cur] == 0){
            cur++;
        }
        StringBuilder sb = new StringBuilder();
        for(int i = cur; i<res.length; i++){
            sb.append(res[i]);
        }
        return sb.length() == 0 ? "0" : sb.toString();
    }
}
全部评论

相关推荐

06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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