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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1000!=1*2*3*.......*1000
求代码

23 个回复

倒序浏览
这样的结果显示不出来,太长。但是我记得原题是问有多少个0 对吧
回复 使用道具 举报
方法一:
int sum=1;
for(int i=1;i<=1000;i++)
{
   sum=sum*i;
}
System.out.println(sum);
方法二:
BigInteger b=new BigInteger("1");
for(int i=1;i<=1000;i++)
{
   b=b.multiply(new BigInteger(String.valueOf(i)));
}
String s=b.toString();
System.out.println(s);

点评

方法一 屏幕会显示0  发表于 2015-4-20 20:34
回复 使用道具 举报
用BigInterger 暴力计算!
回复 使用道具 举报
那个暴力计算好暴力啊
回复 使用道具 举报
要用BigInterger
回复 使用道具 举报
本帖最后由 jiao142857 于 2015-4-20 18:32 编辑

百度了下
package heima;

class PowerOf1000
{

  public static void main(String[] args)
  {
    int[] digits = new int[2568];//他预先知道了位数  
    int max_digit = 2567;
    digits[max_digit] = 1;
    for (int d=2;d<=1000;d++)
    {
      for (int k=max_digit; k<digits.length; k++)
        digits[k] *= d;

      int k = digits.length-1;
      while (k>=max_digit)
      {
        if (digits[k]>10)
        {
          digits[k-1] += digits[k] / 10;
          digits[k] = digits[k] % 10;
          if (k-1<max_digit) max_digit = k-1;
        }
        k--;
      }
    }
    for (int i=max_digit; i<digits.length; i++)
    {
      System.out.print(digits);
   
}
    System.out.println();
  }
}
回复 使用道具 举报
本帖最后由 一诺珍惜 于 2015-4-20 19:21 编辑

package javaC.com.itheima;
/*
* 9、 求1000!的结果中包含多少个0?注:1000! = 1×2×3×4×5×...×999×1000
*/
import java.math.BigInteger;//调用大数据类
public class Test9 {
public static void main(String []args){
   BigInteger res=new BigInteger("1");//创建一个大数据类 ,包含一个整型值res=1
   for(int i=1;i<=1000;i++){//做一个循环,获得1到1000的数
          String j=String.valueOf(i);//将数值类型i转换成字符串类型j
           BigInteger s=new BigInteger(j); //将字符串类型j包装到大数据类型s中
           res=res.multiply(s);//将1000!的值存到res中
   }
   String r=res.toString();//将大数据类型res转换成字符串类型,存到字符串r中
   int count=0;//定义计数器
   for(int i=0;i<r.length();i++){//做一个循环,获得r的位数
           if(r.charAt(i)=='0')//如果r中的该位数为0;
                   count++;  //则计数器加上一次
   }
   System.out.println("1000!的结果包含"+count+"个0");
}
}

回复 使用道具 举报
跟那个基础测试第9题比较像,这里自己就复制过来了
回复 使用道具 举报
特别注意的是数值类型int和它的包装类是不能进行直接转换的,所以需要先吧int型转换成字符串型然后再包装到大数据类型中。
回复 使用道具 举报
不看这个还不知道呢。原来二十几的阶乘就超过long的范围了。。可怕啊。我说怎么调成 1000! 结果是0,改成100!结果还是0,原来是超范围了。
回复 使用道具 举报
关键俩部,到现在也没学到,普通的类型,根本装不 下,      那么长的得数怎么转换成字符串,用遍历去累计
回复 使用道具 举报
有意义,有收获,谢谢提供
回复 使用道具 举报
新手路过~~看看就好~~慢慢学习~
回复 使用道具 举报
ROFFY 中级黑马 2015-4-20 21:43:23
15#
BigInteger
回复 使用道具 举报
zhiweiqi 发表于 2015-4-20 13:56
方法一:
int sum=1;
for(int i=1;i

感谢指正,方法一确实太草率,行不通,因为1000!的结果是一个大数据,需要的存储空间比较大,而int的存储空间是装不了它的,方法一舍弃吧。
回复 使用道具 举报
mono 中级黑马 2015-4-22 09:41:23
17#
赞一个、、
回复 使用道具 举报
一诺珍惜 发表于 2015-4-20 19:15
package javaC.com.itheima;
/*
* 9、 求1000!的结果中包含多少个0?注:1000! = 1×2×3×4×5×...×99 ...

:victory:不错,很赞,不过你这里是计算有几个0的。
回复 使用道具 举报
BigInterger   没错
回复 使用道具 举报
学习了。好多大神。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马