1067: 有问题的里程表
时间限制: 1 Sec 内存限制: 128 MB
提交: 24719 解决: 17337
[状态] [讨论版] [提交] [命题人:admin]题目描述
某辆汽车有一个里程表,该里程表可以显示一个整数,为该车走过的公里数。然而这个里程表有个毛病:它总是从3变到5,而跳过数字4,里程表所有位(个位、 十位、百位等)上的数字都是如此。例如,如果里程表显示339,汽车走过1公里之后,该里程表显示350。
输入
输入一个整数num,表示里程表显示的数值,1 < num < 1000,且一定不含整数4。
输出
输出一个整数,为该汽车实际行驶的公里数。例如,如果该里程表显示55,则实际走过的公里 数是40。
样例输入 Copy
106样例输出 Copy
86提示
方法1:这对本题数据规模较小的情况,可用一个循环来模拟。用一个1~num的循环,在循环过程中,用另一个循环变量计数,统计不含数字4的整数个数。
方法2:此题稍加修改,可转换为一个9进制转换为10进制的问题,此方法更通用。来源/分类
方法:改造一下9进制:原来提供的10进制数是会包含数字9的,但是暗中缺少数字4,也就是说这个数字有0,1,2,3,5,6,7,8,9共9种数字组成,相当于一个9进制数。将该9进制数转化为10进制数就可以得到答案,但是转换时,由于空缺数字4,那么该进制数中大于4的数字,在9进制进位时多了1,于是将该数减去1,再进行乘权求和就可以了
比如有问题9进制752,转化为10进制为:(7-1)*9^2 + (5-1)*9^1 + 2*9^0 = 524
import java.util.*; public class Main{ private static final Scanner sc = new Scanner(System.in); public static void main(String[] args){ int num = sc.nextInt(); int sum = 0, length = (int)Math.log(num);//获取数据长度 for(int i = 0; i <= length; i++){ int bit = num % 10; if(bit >= 4){//没有数字4,补位 bit--; } sum += bit * (int)Math.pow(9, i);//同其它进制转换,该位值 * 位权的幂次 num /= 10; } System.out.println(sum); } }
有问题的里程表 方法2 Java
最新推荐文章于 2023-04-30 00:15:00 发布