import java.math.BigDecimal;
public class Demo {
public static Double[] types = { 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0, 20.0, 50.0, 100.0 };// 人民币币种
public static void main(String[] args) {
Double toMoney = 100.0;// 用于支付的100元
Double tpendMoney = 81.99;// 实际花费81.99元
Double over = DoubleFormat(toMoney - tpendMoney);
System.out.println("找零" + over);
String calc = calc(over);
System.out.println(calc);
}
public static String calc(Double over) {
String resultString = "";
for (int i = 0; i < types.length; i++) {
if (types[i] >= over) {
if (types[i].equals(over)) {
return types[i].toString();
} else {
resultString += types[i - 1];
resultString += "\t" + calc(DoubleFormat(over - types[i - 1]));
break;
}
}
}
return resultString;
}
public static Double DoubleFormat(Double d) {
BigDecimal bd = new BigDecimal(d);
return bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
结果:
找零18.01
面值:10.0 , 5.0 , 2.0 , 1.0, 0.01
public class Buy {
int money100 = 100;
int money50 = 50;
int money20 = 20;
int money10 = 10;
int money5 = 5;
int money2 = 2;
int money1 = 1;
int leftmoney = 0;
public String pay(int paymoney,int price)
{
leftmoney = paymoney - price;
if(leftmoney<100&&leftmoney>50)
{
return "找钱:"+money50 +"元和"+ (paymoney-50-price)+"元";
}
if(leftmoney==50)
{
return "找钱:"+money50 +"元";
}
if(leftmoney<50&&leftmoney>20)
{
return "找钱:"+money20 +"元和"+ (paymoney-20-price)+"元";
}
if(leftmoney==20)
{
return "找钱:"+money20 +"元";
}
if(leftmoney<20&&leftmoney>10)
{
return "找钱:"+money10 +"元和"+ (paymoney-10-price)+"元";
}
if(leftmoney==10)
{
return "找钱:"+money10 +"元";
}
if(leftmoney<10&&leftmoney>5)
{
return "找钱:"+money5 +"元和"+ (paymoney-5-price)+"元";
}
if(leftmoney==5)
{
return "找钱:"+money5 +"元";
}
if(leftmoney<5&&leftmoney>2)
{
return "找钱:"+money2 +"元和"+ (paymoney-2-price)+"元";
}
if(leftmoney==2)
{
return "找钱:"+money2 +"元";
}
if(leftmoney==1)
{
return "找钱:"+money1 +"元";
}
return "找钱:0元";
}
public static void main(String[] args) {
System.out.println(new Buy().pay(30, 30));
}
}
采用递归方式
package com.isoftstone.baidu;
import java.util.Scanner;
public class MoneyDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()) {
int money = scanner.nextInt();
if(money == 0)break;// 0元退出
if(money >= 100)continue;// 大于100元不处理
System.out.println("找零:" + (100 - money));
homing(100 - money);// 找零
}
}
/**
* 找零
* @param money
*/
public static void homing(int money) {
if(money < 100 && money >= 50) {
System.out.print("50 ");
homing(money - 50);
} else if(money < 50 && money >= 20) {
System.out.print("20 ");
homing(money - 20);
} else if(money < 20 && money >= 10) {
System.out.print("10 ");
homing(money - 10);
} else if(money < 10 && money >= 5) {
System.out.print("5 ");
homing(money - 5);
} else if(money < 5 && money >= 2) {
System.out.print("2 ");
homing(money - 2);
} else if(money < 2 && money >= 1) {
System.out.print("1 ");
homing(money - 1);
} else if(money == 0) {
System.out.print("找零完毕!\n");
} else {
System.out.println("不在处理范围");
}
}
}
看看这个
public class Test {
public static void main(String[] args) {
Test m = new Test();
int cost=55;
int cath=100;
int ralch=cath-cost;
System.out.println("一百元:"+m.getMonet(ralch));
//用支付完100元以后的结果在计算50的应该找几张
ralch=ralch%100;
System.out.println("50的:"+m.getfifty(ralch));
ralch=ralch%50;
System.out.println("20元的找几张:"+m.getSecond(ralch));
ralch=ralch%20;
System.out.println("10元的找几张:"+m.getTen(ralch));
ralch=ralch%10;
System.out.println("5元的找几张:"+m.getfive(ralch));
ralch=ralch%5;
System.out.println("2元的找几张:"+m.getTwo(ralch));
ralch=ralch%2;
System.out.println("1元的找几张:"+m.getOne(ralch));
}
public int getMonet(int s) {
return s / 100;
}
public int getfifty(int f) {
return f / 50;
}
public int getSecond(int g) {
return g / 20;
} public int getTen(int t) {
return t / 10;
}
public int getfive(int v) {
return v / 5;
}
public int getTwo(int w) {
return w / 2;
}
public int getOne(int o){
return o/1;
}
}
没明白这题啥意思,尽可能少的纸币是指的每种纸币都包括吗?