1145: 有问题的里程表(2)
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1364 Solved: 784
Submit Status Web Board
Description
某辆汽车有一个里程表,该里程表可以显示一个整数,为该车走过的公里数。然而这个里程表有个毛病:它总是从3变到5,而跳过数字4,里程表所有位(个位、 十位、百位等)上的数字都是如此。例如,如果里程表显示15339,汽车走过1公里之后,该里程表显示15350。
Input
输入一个整数num,表示里程表显示的数值,长度不超过9位,且一定不含整数4。
Output
输出一个整数,表示实际行驶的里程。
Sample Input
150
Sample Output
117
HINT
Source
九进制是只含有0~8 九个数字么,看做是没有4这个数字的九进制数···
逐位*9,以4为界进行累加
#include<stdio.h>
#define N 20
int main ()
{
int num,i=0,k,j;
int str[N];
int m,sum=0;
scanf("%d",&num);
while (num > 0)
{
str[i]=num % 10;
i++;
num = num /10;
}
for ( j = 0 ; j < i ; j++)
{
m=1; //外层循环每次更新使得m=1
for (k=1;k<=j;k++)
{
m=m*9; //当j=2时,循环两次使 m = 9 * 9
}
if ( str[j] <= 3 )
sum += str[j]*m;
if ( str[j] >= 5 )
sum += ( str[j] - 1 ) * m;
}
printf("%d",sum);
}