首页 > 编程语言 > 详细

广发银行研发中心2020春招编程题 整型相乘 Java

时间:2020-03-27 13:42:48      阅读:98      评论:0      收藏:0      [点我收藏+]

好代码和坏的代码的区别就在于,好的代码能够使用更短的时间,更少的内存,做和平庸的代码一样的事情。但是个人觉得,未来更好的硬件出来之后,写好代码和坏代码对于结果的影响越来越小,好代码是否还有意思(又跑题了)。本次编程题是Pixel第一次在笔试中AC,哈哈哈没有理由不记录一下。

题目描述,给定两个整形A和B,求得A^B结果的最后三位数并以字符串形式返回。直接用Pow函数会不会产生一些问题,这个我没有实验过。相似的LeetCode题目还有字符串相乘。代码我的注释也写的很详细的。直接看好了。

public class Main {
    public static void main(String[] args) {

        System.out.println(tailOfPower(2,3));
    }

    // 问题描述:给定整型a和整形b,求得a^b的后三位,以字符串形式返回
    // 问题思路:假设a*b=c,那么c的最后三位仅和a的最后三位和b的最后三位相关,且可以使用乘法运算计算,计算描述如下:
    //
    // 假设求135 * 246 ,想获得结果后三位h,i,j,运算公式如下
    //
    //   1 3 5
    // * 2 4 6
    // -------
    //   a b c
    //   e f
    //   g
    // -------
    //   h i j
    //
    // 可以得出j=c=5*6=30 的个位,即0,且向十位进位,进3
    // i=b+f+个位进位=3*6+4*5+3=41的个位,即1,且向百位进位,进4
    // h=a+e+g+十位进位=1*6+4*3+2*5+4=32的个位,即2
    // 得到最后三位210.

    public static String tailOfPower(int a,int b){

        //将A的最后三位保存,由整型数组接收,其中索引0为百位,索引1为十位,索引2为个位
        int[] arrTail=new int[3];
        //整形数组第一位保存百位数
        arrTail[0]=(a/100)%10;
        //整形数组第二位保存十位数
        arrTail[1]=(a/10)%10;
        //整形数组第三位保存个位数
        arrTail[2]=a%10;

        //第一次相乘是A乘以A,故输入为A后三位
        int[] input=arrTail;

        //共循环b-1次,因为第一次是A*A所以一共计算B次
        for (int i = 0; i < b-1; i++) {
            //定义输出的三位数
            int[] output=new int[3];

            //定义个位向十位的进位
            int JWG=0;
            //计算c(如前公式所示)
            int numG=input[2]*arrTail[2];
            //若c大于0则计算进位
            if(numG>10){
                JWG=numG/10;
            }
            //保存c的个位为输出的个位
            output[2]=numG%10;

            //懒得写了,计算十位数和向百位的进位
            int JWS=0;
            int numS=input[1]*arrTail[2]+input[2]*arrTail[1]+JWG;
            if(numS>10){
                JWS=numS/10;
            }
            output[1]=numS%10;

            //计算百位数,这里不计算进位了
            int numB=input[0]*arrTail[2]+input[1]*arrTail[1]+input[2]*arrTail[0]+JWS;
            output[0]=numB%10;

            //debug代码,请忽略>_<
            //for (int i1 = 0; i1 < output.length; i1++) {
            //    System.out.print(output[i1]);

            //}
            //System.out.println();

            //将计算出的三位数字保存,下一次就将这三位数作为输入和A的后三位计算了
            input=output;
        }

        //将数组写成字符串形式,后返回
        String s=""+input[0]+input[1]+input[2];
        return s;
    }
}

该算法最终获得100%通过。

广发银行研发中心2020春招编程题 整型相乘 Java

原文:https://www.cnblogs.com/PixelShine/p/12580615.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!