题目描述
程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。
出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能都正常。
比如:
-
23再多一块钱就变为25;
-
39再多一块钱变为50;
-
399再多一块钱变为500;
小明识破了司机的伎俩,准备利用自己的学识打败司机的阴谋。
给出计费表的表面读数,返回实际产生的费用。
public class work {
public static void main(String[] args) {
System.out.println(demo(5));
}
public static int demo(int num){
//修改参数,可以动态确认逢几过
final int NUM = 4;
//记录总数值
int sum = 0;
//对于没位数进行截串
String s = String.valueOf(num);
//记录总位数
int length = s.length();
//惊醒循环
for (int i = 0; i < s.toCharArray().length; i++) {
//将每位数截串
byte c = (byte) ((byte) s.charAt(i) - 48);
//策略模式:对于不同位数情况进行分而治之
if (c > NUM) {
sum += Math.pow(9, length - i - 1) * (c - 1);
} else if (c < NUM) {
sum += Math.pow(9, length - i - 1) * c;
} else {
sum += Math.pow(9, length - i - 1) * 3;
break;
}
}
return sum;
}
}