要求用户输入表示金额的一个double类型的值。然后计算用来表示金额的最少纸币及硬币分别多少,从最大面值开始计算(假定纸币面额有:50元,20元,10元及5元,硬币面额有:1元,5角,1角,5分,2分及1分)。例如,如果输入的是82.73(82元7角3分),则程序的输出如下:1张50元纸币
1张20元纸币
1张10元纸币
0张5元纸币
2个1元硬币
1个5角硬币
2个一角硬币
0个5分硬币
1个2分硬币
1个1分硬币

解决方案 »

  1.   

    double []values = new double[]{50,20,10,5,1,0.5,0.1,0.05,0.02,0.01};
    double sum = 82.73;

    for (int i = 0; i < values.length; i++) {
    int num = (int)(sum / values[i]) ; // 用了几张这种面值的钱
    System.out.println(num);
    sum = sum%values[i];  // 剩余多少钱

    }
      

  2.   

    public static void main(String[] args) {
            double[] values = {50,20,10,5,1,0.5,0.1,0.05,0.02,0.01};
            String[] str = {"张50元","张20元","张10元","张5元","个1元","个5角","个1角","个5分","个2分","个1分"};
            Scanner in = new Scanner(System.in);
            System.out.println("请输入计算的金钱:");
            double money = in.nextDouble();
            if(money>0){
                for (int i = 0; i < values.length; i++) {
                int num = (int)(money / values[i]) ; // 用了几张这种面值的钱
                System.out.println(num+str[i]);//输出
                    money = money%values[i];  // 剩余多少钱
            }
                System.out.println("计算完成!");
            }else{
                System.out.println("金钱不可为负数!");
            }
      

  3.   

    为什么输出85.6  会输出总额85.49呢我看了一下 确实是有问题 现在做修改了 
     public static void main(String[] args) {
            double[] values = {50,20,10,5,1,0.5,0.1,0.05,0.02,0.01};
            String[] str = {"张50元","张20元","张10元","张5元","个1元","个5角","个1角","个5分","个2分","个1分"};
            Scanner in = new Scanner(System.in);
            System.out.println("请输入计算的金钱:");
            double money = in.nextDouble();
            if(money>0){
                for (int i = 0; i < values.length; i++) {
                    BigDecimal bg = new BigDecimal(money);//转换格式
                    double now = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();//取2位小数,并四舍五入
                    int num = (int)(now / values[i]) ; // 用了几张这种面值的钱
                    System.out.println(num+str[i]);//输出
                    money = now %values[i];  // 剩余多少钱
                }
                System.out.println("计算完成!");
            }else{
                System.out.println("金钱不可为负数!");
            }
       }
      

  4.   

    可以使用枚举尝试,代码没有重构,有兴趣修改重构一下:
    关于精度没有使用BigDecimal,建议重构使用BigDecimal版本:
    public class CurrencyApplication {
    public static void main(String[] args) { Scanner in=new Scanner(System.in);
    System.out.println("Please input the concurcy:");
    String input=in.nextLine();
    //skip pre check and deal
    double amount=Double.parseDouble(input);
    int iPart=(int)amount;
    int jPart=(int)((amount-iPart)*10);
    int fPart=(int)(Math.ceil((amount-iPart)*100)-jPart*10);
    //avoid use values() method prevent dependency declare order
    final List<Conrency> yconrencys=Conrency.yconrencys();
    int[] yresults=new int[yconrencys.size()];
    Arrays.fill(yresults,0);
    compute(iPart, yconrencys, yresults); final List<Conrency> jconrencys=Conrency.jconrencys();
    int[] jresults=new int[jconrencys.size()];
    Arrays.fill(jresults,0);
    compute(jPart, jconrencys, jresults); final List<Conrency> fconrencys=Conrency.fconrencys();
    int[] fresults=new int[fconrencys.size()];
    Arrays.fill(fresults,0);
    compute(fPart, fconrencys, fresults); StringBuilder result=new StringBuilder(); for(int i=0;i<yresults.length;i++){
    result.append(yresults[i]+"张->"+yconrencys.get(i).toString()+"\n");
    } for(int i=0;i<jresults.length;i++){
    result.append(jresults[i]+"张->"+jconrencys.get(i).toString()+"\n");
    }
    for(int i=0;i<fresults.length;i++){
    result.append(fresults[i]+"张->"+fconrencys.get(i).toString()+"\n");
    }
    System.out.println(result.toString());
    } private static void compute(int iPart, List<Conrency> yconrencys, int[] yresults) {
    for(int i=0;i<yconrencys.size();i++) {
    int value=yconrencys.get(i).getValue();
    if (iPart >= value) {
    yresults[i] = iPart / value;
    iPart -= yresults[i] * value;
    }
    }
    }}enum Conrency{
    Y100(100,Unit.Y),
    Y50(50,Unit.Y),
    Y20(20,Unit.Y),
    Y10(10,Unit.Y),
    Y5(5,Unit.Y),
    Y2(2,Unit.Y),
    Y1(1,Unit.Y),
    J5(5,Unit.J),
    J2(2,Unit.J),
    J1(1,Unit.J),
    F5(5,Unit.F),
    F2(2,Unit.F),
    F1(1,Unit.F),
    ;
    private final int value;
    private final Unit unit; Conrency(int value, Unit unit) {
    this.value = value;
    this.unit = unit;
    } public int getValue() {
    return value;
    } public static List<Conrency> yconrencys(){
    return Collections.unmodifiableList(Arrays.asList(Y100,Y50,Y20,Y10,Y5,Y2,Y1));
    }
    public static List<Conrency> jconrencys(){
    return Collections.unmodifiableList(Arrays.asList(J5,J2,J1));
    }
    public static List<Conrency> fconrencys(){
    return Collections.unmodifiableList(Arrays.asList(F5,F2,F1));
    } @Override
    public String toString() {
    return value+unit.toString();
    } enum Unit{
    Y("元"),
    J("角"),
    F("分");
    final String unit; Unit(String unit) {
    this.unit = unit;
    } @Override
    public String toString() {
    return unit;
    }
    }
    }