欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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);

}

 

相关标签: Online Judge