DecimalFormat在一道笔试题中的应用

题目说明

                                                     铺地砖(京东2016实习生真题)
小东最近承接了一个工程,为一块广场铺设地砖。待铺设的广场是矩形的,大小为N*M平米,业主要求铺设的地砖规格统一,大小为a*a平米。地砖可以超出待铺设的区域,但必须将指定的区域完全覆盖。铺设时,要求地砖边缘需与指定区域边缘平行,且必须用整块的地砖铺设,不允许将地砖破碎铺设。

为节约成本,小东需要知道铺设最少需要多少地砖。请你帮忙计算她最少需要采购的地砖数。



题目分析
输入的数据可以分为两种情况,M>=a&&N>=a(1)  或者 M<a||N<a(2)
之后(1)可分为四种情况 ,M%a==0&&N%a==0和另外三种情况。详见代码分析
(2)可以分为三种情况,M<a&&N<a和另外两种情况。详见代码分析


相关代码

注意事项
(1) 注意a<10^9,所以最终的输出结果要为double类型的数据。但输入数据均可使用int类型的数据进行接受。
(2)double类型的数据要想确定输出模式,要使用 DecimalFormat这个库函数。
DecimalFormat dFormat=new DecimalFormat("##.##");
 System.out.println(dFormat.format(number));


DecimalFormat 类主要靠 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置,但不会用0填充。主要作用于小数位的操作。

import java.util.ArrayList;
import java.util.Scanner;

public class Main{

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Scanner in=new Scanner(System.in);
        DecimalFormat dFormat=new DecimalFormat("##.##");//确保以整数的形式进行输出。
        int count=Integer.parseInt(in.nextLine());
        ArrayList<String> list=new ArrayList<String>();
        String line=null;
        for (int i = 0; i < count; i++) {
			line=in.nextLine();
			list.add(line);
		}
       
        int num[]=new int[3];
        int n1=0,n2=0;//n1,n2为M/a和N/a;
        double number=0;
        String numString[];
        for (int i = 0; i < list.size(); i++) {
			line=list.get(i);
			numString=line.split(" ");
			for (int j = 0; j < 3; j++) {
				num[j]=Integer.parseInt(numString[j]);
			}
			if (num[0]>=num[2]&&num[1]>=num[2]) {//第(1)种情况
				if (num[0]%num[2]==0&&num[1]%num[2]==0) {
					number=((double)num[0]/num[2])*((double)num[1]/num[2]);
				}
				else if(num[0]%num[2]==0&&num[1]%num[2]!=0){//其中有一边不能整除, 结果(n1+1)*n2或者(n2+1)*n1 

				   number=(Math.ceil(num[1]*1.0/num[2]))*(num[0]/num[2]);//有与整数相处不会有小数,所以要将整数型变为double型(*1.0)
				}
				else if(num[0]%num[2]!=0&&num[1]%num[2]==0){//其中有一边不能整除

					number=Math.ceil(num[0]*1.0/num[2])*(num[1]/num[2]);
				}
				else {//l两边都不能整除, 结果(n1+1)*(n2+1)
					
					n1=num[0]/num[2];
					n2=num[1]/num[2];
					number=(double)n1*(double)n2+n1+n2+1;
						
				}
		  }
		  else {//第(2)种情况
			if (num[0]<num[2]&&num[1]<num[2]) { //M<a&&N<a
				number=1;
			}
			else if(num[0]<num[2]&&num[1]>=num[2]){  //一条边比a小,结果为大的边/a

				number= Math.ceil(num[1]*1.0/num[2]);
			}
			else if (num[1]<num[2]&&num[0]>=num[2]) {//一条边比a小,结果为大的边/a

				number=Math.ceil(num[0]*1.0/num[2]);
			}
		}
			
			System.out.println(dFormat.format(number));
		}
	}

}

DecimalFormat库函数的使用


实例如下
  DecimalFormat dFormat=new DecimalFormat("##.##");
        DecimalFormat dFormat2=new DecimalFormat("000.000");

        System.out.println(dFormat.format(1333)); //#对整数位影响比较小,当整数位数超出定义位数会正常显示
        System.out.println(dFormat.format(1333.0));//#不能代表0,所以此处可以将double类型的数据已int形式输出
        System.out.println(dFormat.format(1333.234567));//#对小数位影响比较大,当整数位数超出定义位数会进行舍入
        System.out.println(dFormat.format(3.234567));//当整数位数少于定义位数不会填充

        System.out.println();
        System.out.println(dFormat2.format(1333)); //小数位不够时会进行填充
        System.out.println(dFormat2.format(1333.0));
        System.out.println(dFormat2.format(1333.234567));//小数位超出时同#
        System.out.println(dFormat2.format(3.234567));//整数位不够时会填充0



输出结果
1333
1333
1333.23
3.23

1333.000
1333.000
1333.235
003.235





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值