ZZULIOJ 1145: 有问题的里程表(2)
程序员文章站
2022-06-19 13:33:04
...
题目描述
某辆汽车有一个里程表,该里程表可以显示一个整数,为该车走过的公里数。然而这个里程表有个毛病:它总是从3变到5,而跳过数字4,里程表所有位(个位、 十位、百位等)上的数字都是如此。例如,如果里程表显示15339,汽车走过1公里之后,该里程表显示15350。
输入
输入一个整数num,表示里程表显示的数值,长度不超过9位,且一定不含整数4。
输出
输出一个整数,表示实际行驶的里程。
样例输入
150
样例输出
117
tips:
1 刚开始使用累加的方法,判断数值是否包含4,出现超时
2 参考其他人的思路,使用的是 不包含4的九进制
150 代表的是 0*9^0 + (5-1)*9^1 + 1 * 9^2
#include<stdio.h>
#include<string.h>
#include<math.h>
int main(){
int num, ret = 0,buf[10],i=0,weight;
scanf("%d",&num);
while (num)
{
buf[i] = num % 10;
num /= 10;
i++;
}
for (int j = 0; j < i; j++)
{
weight = 1; //weight代表权重
for (int k = 1; k <= j; k++)
{
weight *= 9;
}
if (buf[j]<4)
{
ret += weight*buf[j]; //该位上的数值小于4直接乘权重
}
else{
ret += weight*(buf[j] - 1); //该位上的数值大于等于4都需要先减1再乘权重
}
}
printf("%d\n",ret);
}
下一篇: 磨损着自己的手指