黑马程序员技术交流社区

标题: 用while循环完成如下案例 [打印本页]

作者: 蓝之林    时间: 2015-9-27 00:49
标题: 用while循环完成如下案例
已知纸张厚度:0.01米,珠峰高度为8848米
  求:纸张折叠多少次能达到珠穆朗玛峰的高度

作者: ll5353231    时间: 2015-9-27 00:49
class ZhuF {
        public static void main(String[]args){
                float a = 0.01f;
                int count = 0;
                while(a <= 8848){
                        a *=2;
                        count++;
               
                }
                System.out.println("次数为" + count);
        }

}

作者: 瑞雪雄起    时间: 2015-9-27 02:01
楼上的同学回答的是错误的
作者: 瑞雪雄起    时间: 2015-9-27 02:03
你要知道,0.01可是浮点型数据呀
作者: 瑞雪雄起    时间: 2015-9-27 02:27

class ZhuF {
        public static void main(String[]args){
          double x=1;
          while(Math.pow(2,x)<=884800L)
          {
          x++;
          }
          System.out.println(x);   
        }

}
不过最好使用大数据来算
作者: YaYa    时间: 2015-9-27 09:10
int paper=1; // 俩数都乘100,省的一个是浮点,一个是正数
int zhumulangma=884800;
while(paper<=zhumulangma){
x++;
}
System.out.println(x);   
作者: 严旭晟    时间: 2015-9-27 09:31
  1. /*
  2. 已知纸张厚度:0.01米,珠峰高度为8848米
  3.   求:纸张折叠多少次能达到珠穆朗玛峰的高度
  4. 思路一:1.纸张每折叠一次,其厚度是原先厚度的2倍
  5.        2.以米为计量单位,那么厚度是浮点型变量,高度为整型变量
  6.        3.达到高度 等价于  纸张最终折叠后的厚度==珠峰高度
  7.           
  8. 步骤:1.定义变量 thickness 保存厚度值
  9.        2.定义 float thickness = 0.01
  10.          定义 常量 表示 珠峰高度 HEIGHT = 8848
  11.        3. 浮点型 ---> 整型的转换
  12.            A。为保证判断时类型合法,必须要用到转型
  13.        B。为了保证精度,考虑使用Math.round()函数

  14. 思路二:方程:0.01 * (2的n次方)= 8848
  15.              <==> (2的n次方)= 884800
  16.                          n = log2(884800)
  17. */

  18. public class ThickTest
  19. {
  20.         public static final int HEIGHT = 8848;
  21.         public static int getFoldCount(int height)
  22.         {
  23.                 /*
  24.                   折叠的次数为整数
  25.                 */
  26.                 int count = 0;
  27.                 float thickness = 0.01f;
  28.                 int temp = Math.round(thickness);
  29.                 while(true)
  30.                 {
  31.                    thickness = 2*thickness;
  32.                    count++;
  33.                    temp = Math.round(thickness);
  34.                    /*
  35.                       因为log2(884800) = 19.75,换句话说
  36.                           实际上,temp 不可能存在等于 HEIGHT的情况,
  37.                           所以应该在temp值第一次大于HEIGHT的时候,跳出循环
  38.                           结束计数。
  39.                    */
  40.                    if(temp > HEIGHT)
  41.                    {
  42.                           System.out.println("temp: "+temp);
  43.                           break;
  44.                    }
  45.                 }
  46.             return count;
  47.         }
  48.         public static void main(String[] args)
  49.         {
  50.                 System.out.println("需要折叠"+getFoldCount(HEIGHT)+"次");
  51.         }
  52. }
  53.          
复制代码

结果如下:

result.png (23.25 KB, 下载次数: 12)

result.png

作者: JYcainiao    时间: 2015-9-29 14:47
应该是小于8848吧,不能小于等于吧,假设结婚刚好是8848是不是还要折叠一次呢?
作者: 迷茫不堪的年纪    时间: 2015-10-13 00:29
上海0925马树忠 发表于 2015-9-30 22:18
今天刚学哎
class WhileDemo2
{

如此简单 - - ?。 。 。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2