A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 编程学徙 中级黑马   /  2014-6-16 13:52  /  1477 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码:
  1. import java.math.BigInteger;
  2. import java.util.*;

  3. /**
  4. 此程序用以输出1000的阶乘,并统计其尾部0的个数,这是对BigInteger类的一个综合练习。
  5. 步骤:
  6. 1、先求出1000的阶乘;
  7. 2、用结果自身除以10,jishu自增1;
  8. 3、判断结果除以10之后的余数是否为0,如果是,返回第2步,如果不是,执行第4步;
  9. 4、输出计数结果。
  10. */

  11. public class BigDemo
  12. {
  13.         public static void main(String[] args)
  14.         {
  15.                 int i;
  16.                 BigInteger result = new BigInteger("1");                                        //1000!是一个大数据,需要用BigInteger来保存;
  17.                 for(i=1;i<=1000;i++)
  18.                 {
  19.                         result = result.multiply(BigInteger.valueOf(i));
  20.                         //a.multiply(b):大数据的乘法表示方法;
  21.                         //int型变量要参数大数据运算,要用BigInteger.valueof()来做转换。
  22.                 }
  23.                 System.out.println("1000! = "+result);
  24.                 int jishu = 0;                                                                                                //jishu用以统计0的个数。
  25.                 BigInteger ten = new BigInteger("10");
  26.                 BigInteger zero = new BigInteger("0");
  27.                 BigInteger z = new BigInteger("0");                                                        //z的作用是用来存储result除以10之后的余数。
  28.                 do
  29.                 {                       
  30.                         result = result.divide(ten);                                                        //a.divide(b):大数据的除法表示方法。
  31.                         jishu++;
  32.                         z = result.mod(ten);
  33.                 }while(z.compareTo(zero) == 0);                                                                //a.compareTo(b):比较两个大数据的大小,如果相等,返回值为0。
  34.                 System.out.println("0的个数为:"+jishu);
  35.         }
  36. }
复制代码

运行结果:



4 个回复

正序浏览
看看,顺便灌灌水!O(∩_∩)O
回复 使用道具 举报
我做的基础测试就有这道题。
下面是我做的
  1. import java.math.*;
  2. class  Test9
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 BigInteger bi = calculate();
  7.                 String str = transform(bi);
  8.                 result(str);
  9.         }

  10.     //先计算1000! long和int类型范围太小,用BigInteger解决大数问题 用到了BigInteger的乘法方法multiply();
  11.         public static BigInteger calculate()
  12.         {
  13.                 BigInteger res = new BigInteger("1");
  14.                 for(int i=2;i<=1000;i++)
  15.                 {
  16.                         res = res.multiply(new BigInteger(String.valueOf(i)));
  17.                 }
  18.                 return res;
  19.         }
  20.        
  21.         //将BigInteger类型的大数转换成String类型
  22.         public static String transform(BigInteger bi)
  23.         {
  24.                 String str =bi.toString();
  25.                 return str;
  26.         }
  27.    
  28.         //计算字符串中有多少‘0’  用到了String.charAt()方法
  29.         public static void result(String str)
  30.         {
  31.                 int count = 0;
  32.                 for(int i=0;i<str.length();i++)
  33.                 {
  34.                         if(str.charAt(i)=='0')
  35.                         count++;
  36.                        
  37.                 }
  38.                 System.out.println("结果中共有"+count+"个0");
  39.         }

  40. }
复制代码
回复 使用道具 举报
没什么人关注啊……自顶。。。
写了一段求彩票概率的小代码……
  1. import java.math.*;
  2. import java.util.*;
  3. /**
  4. 本程序用以计算m选n的概率。其公式为:(m*(m-1)*(m-2)...*(m-(n-1))/(1*2*3..*n);
  5. */
  6. public class GaiLv
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 Scanner in = new Scanner(System.in);
  11.                 BigInteger result = new BigInteger("1");
  12.                 int m,n;
  13.                 System.out.println("请输入m的值:");
  14.                 m = in.nextInt();
  15.                 System.out.println("请输入n的值:");
  16.                 n = in.nextInt();
  17.                 int k;
  18.                 for(k=1;k<=n;k++)
  19.                 {
  20.                         result = result.multiply(BigInteger.valueOf(m-k+1));
  21.                         result = result.divide(BigInteger.valueOf(k));
  22.                 }
  23.                 System.out.println(m+"选"+n+"的概率为:"+result+"分之1");               
  24.         }
  25. }
复制代码
回复 使用道具 举报
来学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马