华为计算机怎么算汇率,华为:货币汇率机试题

该博客介绍了一个Java程序,用于实现货币兑换的算法。程序处理不同货币之间的汇率转换,包括英镑、美元、人民币和港元。它支持两种兑换模式:最大兑换和最小兑换。在最大兑换模式下,将输入金额转换为各货币的最大单位组合;在最小兑换模式下,只使用港元作为单位。程序首先检查输入的汇率和兑换模式是否有效,然后进行相应的货币转换计算。
摘要由CSDN通过智能技术生成

///其实是修改的别人的代码,代码不分家,共享靠大家,留作以后复习参考。

import java.util.Scanner;

///题目是  1英镑=2美元=16人民币=32港元

///MAX为最大兑换,意思是所有货币都要用到

///MIN为最小兑换,意思是只需要港元为单位即可

///这道题看透了其实就是一道求单位的题,只需要用到除法!!!!!!!!

///输入: 2 8 2 127 HKD MAX

/// 第一个参数代表英镑兑美元的汇率,第二个参数代表美元兑人民币的汇率,第三个参数代表人民币对港元的汇率

///英镑>美元>人民币>港元

///输出:3 GBP 1 USD 7 CNY 1 HKD

///3*32+1*16+7*2+1 = 127

public class Main

{

public static class SolutionWay

{

private static final String GBP = "GBP";///英镑

private static final String USD = "USD";///美元

private static final String CNY = "CNY";///人民币

private static final String HKD = "HKD";///港元

private static final String MAX = "MAX";///最大兑换

private static final String MIN = "MIN";///最小兑换

private static final String ERROR = "ERROR";

private static int gbpRate;

private static int usdRate;

private static int cnyRate;

private static int inputNum;

private static String inputType;

private static String resultType;

///设置汇率系数

private static void setParam(int a, int b, int c, int num, String inputT, String resultT)

{

gbpRate = a * b * c;

usdRate = a * b;

cnyRate = a;

inputNum = num;

inputType = inputT;

resultType = resultT;

}

private static int getRate(String type)

{

switch (type)

{

case GBP:

return gbpRate;

case USD:

return usdRate;

case CNY:

return cnyRate;

default:///港元

return 1;

}

}

private static boolean checkNum(String num)///检查输入是否为负数,或小数

{

for (int i = 0; i < num.length(); i++)

{

char c = num.charAt(i);

if (c < '0' || c > '9')

{

return false;

}

}

return true;

}

private static boolean checkType(String type)///检查货币类型是否为以下四种之一,主要是检查是否为大写

{

return type.equals(HKD) || type.equals(CNY) || type.equals(USD) || type.equals(GBP);

}

///输入的所有参数都要进行检查

private static boolean checkResultType(String resultType)///检查是否为MAX或MIN

{

return resultType.equals(MAX) || resultType.equals(MIN);

}

private static String getMaxResult()

{

int tempV = getRate(inputType) * inputNum;///货币转换成以港元为单位

StringBuilder result = new StringBuilder();

if (tempV / gbpRate > 0)

{

result.append(tempV / gbpRate).append(' ').append("GBP ");

tempV = tempV % getRate(GBP);

}

if (tempV / usdRate > 0)

{

result.append(tempV / usdRate).append(' ').append("USD ");

tempV = tempV % getRate(USD);

}

if (tempV / cnyRate > 0)

{

result.append(tempV / cnyRate).append(' ').append("CNY ");

tempV = tempV % getRate(CNY);

}

if (tempV > 0)

{

result.append(tempV).append(' ').append("HKD");

}

return result.toString();

}

private static String getMinResult()

{

return inputNum * getRate(inputType) + " HKD";

}

private static String computer(String input)

{

String[] strArr = input.split("\\s");///以空白字符分割字符串,得到一个字符串数组。

/*

1、\s用于匹配空白字符。

2、\\s用于匹配字符串中的\和s,两个字符。

*/

if (strArr.length == 6 && (checkNum(strArr[0]) && checkNum(strArr[1]) && checkNum(strArr[2]) && checkNum(strArr[3]) && checkType(strArr[4]) && checkResultType(strArr[5])))

{

setParam(Integer.parseInt(strArr[0]), Integer.parseInt(strArr[1]), Integer.parseInt(strArr[2]), Integer.parseInt(strArr[3]), strArr[4], strArr[5]);

if (resultType.equals(MAX))

{

return getMaxResult();///最大兑换

} else

{

return getMinResult();

}

} else

{

return ERROR;

}

}

}

public static void main(String[] args)

{

Scanner in = new Scanner(System.in);

String s1 = in.nextLine();

System.out.println(SolutionWay.computer(s1));

}

}

/*

一些基础总结

1、 String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。

2、 StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过

StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()

等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,

就可以调用它的toString()方法将其转换为一个String对象。

3、StringBuilder类也代表可变字符串对象。实际上,StringBuilder和StringBuffer基本相似,

两个类的构造器和方法也基本相同。不同的是:StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。

StringBuffer类中的方法都添加了synchronized关键字,也就是给这个方法添加了一个锁,用来保证线程安全。

*/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值