zoukankan      html  css  js  c++  java
  • 一道java算法题分析

    最近在面试中遇到这样的一道算法题:
           求100!的结果的各位数之和为多少?
           如:5!=5*4*3*2*1=120,那么他们的和为1+2+0=3
    这道题不算难,不过倒是注意的细节也有一些:
    1.数据的越界问题

    如果求的是171的阶乘的话,就会超出double类型的存储范围,这时候就要处理了,不然得到的结果是:Infinity
    1.可以通过java的BigInteger类来进行处理;
    2.可以将结果中的每一位数存在一个int类型的数组中,不过这个方法还没有想出来

    代码如下:

     1 package com.fire.test;
     2 
     3 public class Test {
     4     
     5     public static void main(String args[]) {
     6         
     7         double res =  getFactorial(100);
     8         int sum = getSum(res);
     9         System.out.println(sum);
    10     }
    11     
    12     /**
    13      * 求一个数的阶乘(递归)
    14      * @param num
    15          * 当num为171时会超出double类型的存储范围 
    16      */
    17     private static double getFactorial(int num) {
    18         
    19         double res = 0;
    20         if (num == 1) {
    21             
    22             return 1;
    23         } else {
    24             
    25             res = num * getFactorial(num - 1);
    26         }
    27         return res;
    28     }
    29     /**
    30      * 求出每位数的和
    31      * @param res
    32      * @return
    33      */
    34     private static int getSum(double res) {
    35         
    36         int sum = 0;
    37         while (res > 0) {
    38             
    39             sum += res % 10;
    40             res /= 10;
    41         }
    42         return sum;
    43     }
    44     /**
    45      * 通过字符串截取的方式获得各位数的和(通过截取字符串的方式来求)
    46      * @param res
    47      * @return
    48          * http://www.cnblogs.com/sosoft/
    49      */
    50     private static int getSum1(double res) {
    51         
    52         int sum = 0;
    53         String resStr = String.valueOf(res);
    54         for (int i = 0; i < resStr.length(); i++) {
    55             
    56             // 一个char类型的数据减去'0'可以得到对应的int类型
    57             sum += resStr.charAt(i) - '0';
    58         }
    59         return sum;
    60     }
    61 }
  • 相关阅读:
    perl6检测网站CMS脚本(测试代码)
    perl6 struct2-045 EXP
    perl6 单线程破解phpmyadmin脚本
    perl6 登录phpmyadmin
    PHP反序列化漏洞学习
    PHP对象5: define / const /static
    PHP对象4: final 不允许重写方法或不允许继承类
    ISCC之misc复现-High起来!
    宁波市第二届CTF之cripto1
    宁波市第二届CTF部分WP之msc1,msc2
  • 原文地址:https://www.cnblogs.com/sosoft/p/3503958.html
Copyright © 2011-2022 走看看