
求各位大神解答一个java程序啊!!!!!很急!在线等~~~谢谢啦 10
从键盘输入一指定金额(以元为单位,如345.78),然后显示支付该金额的各种面额人民币数量,要求显示100元,50元,10元,5元,2元,1元,5角,1角,5分,1分各多...
从键盘输入一指定金额(以元为单位,如345.78),然后显示支付该金额的各种面额人民币数量,要求显示100元,50元,10元,5元,2元,1元,5角,1角,5分,1分各多少张。例:(输出面额最大值:345.78=100*3+10*4+5*1+0.5*1+0.1*2+0.01*8)
展开
2个回答
展开全部
import java.io.BufferedReader;import java.io.IOException;
import java.io.InputStreamReader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test1 {
public static void main(String[] args) throws IOException{
int[] values=new int[]{100,50,10,5,2,1,50,10,5,1};
String[] sA=new String[]{"100","50","10","5","2","1","0.5","0.1","0.05","0.01"};
BufferedReader strin=new BufferedReader(new InputStreamReader(System.in));
while(true){
System.out.println("请输入..yyy.xx格式的金额,输入0退出:");
String inS=strin.readLine();
if(inS.equals("0")){
System.exit(0);
}
String[] inSA=inS.split("\\.");
int first=0;
int second=0;
try{
first=Integer.parseInt(inSA[0]);
if(inSA.length>1){
String secS=inSA[1].substring(0, 2);
secS=secS.length()==1?secS+"0":secS;
second=Integer.parseInt(secS);
}
}catch(NumberFormatException x){
System.err.println("金额格式输入错误");
continue;
}
int[] nums=new int[values.length];
split((int)(first), values, 0, nums,5);
split((int)(second), values, 6, nums,9);
StringBuffer sb=new StringBuffer(inS).append("=");
for(int i=0;i<nums.length;i++){
if(nums[i]!=0){
sb.append(sA[i]).append("*").append(nums[i]);
sb.append("+");
}
}
sb.setLength(sb.length()-1);
System.out.println(sb.toString());
}
}
//拆分的子元素中含有1,所以可以先从最大的开始,这样在最后时由1补齐即可
//target表示要拆分的数,values拆分子元素集合,index表示取子元素位置,nums记录拆分后的个数,bouns表示边界
public static void split(int target,int[] values,int index,int[] nums,int bouns){
if(index>bouns)return;
int num=target/values[index];
nums[index]=num;
split(target-num*values[index], values,++index,nums,bouns);
}
}
import java.io.InputStreamReader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test1 {
public static void main(String[] args) throws IOException{
int[] values=new int[]{100,50,10,5,2,1,50,10,5,1};
String[] sA=new String[]{"100","50","10","5","2","1","0.5","0.1","0.05","0.01"};
BufferedReader strin=new BufferedReader(new InputStreamReader(System.in));
while(true){
System.out.println("请输入..yyy.xx格式的金额,输入0退出:");
String inS=strin.readLine();
if(inS.equals("0")){
System.exit(0);
}
String[] inSA=inS.split("\\.");
int first=0;
int second=0;
try{
first=Integer.parseInt(inSA[0]);
if(inSA.length>1){
String secS=inSA[1].substring(0, 2);
secS=secS.length()==1?secS+"0":secS;
second=Integer.parseInt(secS);
}
}catch(NumberFormatException x){
System.err.println("金额格式输入错误");
continue;
}
int[] nums=new int[values.length];
split((int)(first), values, 0, nums,5);
split((int)(second), values, 6, nums,9);
StringBuffer sb=new StringBuffer(inS).append("=");
for(int i=0;i<nums.length;i++){
if(nums[i]!=0){
sb.append(sA[i]).append("*").append(nums[i]);
sb.append("+");
}
}
sb.setLength(sb.length()-1);
System.out.println(sb.toString());
}
}
//拆分的子元素中含有1,所以可以先从最大的开始,这样在最后时由1补齐即可
//target表示要拆分的数,values拆分子元素集合,index表示取子元素位置,nums记录拆分后的个数,bouns表示边界
public static void split(int target,int[] values,int index,int[] nums,int bouns){
if(index>bouns)return;
int num=target/values[index];
nums[index]=num;
split(target-num*values[index], values,++index,nums,bouns);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询