程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。
出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能都正常(23->25,399->500(400、401、402、……))。
你能根据计费表的数字,计算出实际的数字吗?
import java.util.Arrays;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = 0;
while (in.hasNextInt()){
n = in.nextInt();
if (n >= 1 && n <= 888888888){
break;
}
}
//System.out.println(n);
int[] base_duo = new int[9]; //各个位数大于4时多出的数和10的关系
for (int i = 0, j = 1; i< 9; i++, j *= 10){
base_duo[i] = j;
}
//System.out.println(Arrays.toString(base_duo));
int[] base_yuan = new int[9]; //各个位数和10的基本关系
for (int i = 1; i < 9; i++) {
base_yuan[i] = base_duo[i];
}
//System.out.println(Arrays.toString(base_yuan));
StringBuffer stringBuffer = new StringBuffer();
String append = stringBuffer.append(n).reverse().toString();
int temp = 0;
//有几位数就循环几次
for (int i = 0; i < append.length(); i++) {
//拿到每一个位置上的数, 并进行处理
int wei = Integer.parseInt(append.charAt(i) + "");
if (wei == 0){
temp += 9 * (base_yuan[i] / 10);
}
if (wei > 4){
temp = temp + base_duo[i] + (wei - 1) * (base_yuan[i] / 10);
}
if (wei < 4){
temp = temp + wei * (base_yuan[i] / 10);
}
}
System.out.println(n-temp);
}
}