出租车计费 、靠谱的车

简介: 出租车计费 、靠谱的车

题目描述:出租车计费 、靠谱的车

程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。


出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能都正常。


比如:


23再多一块钱就变为25;

39再多一块钱变为50;

399再多一块钱变为500;

小明识破了司机的伎俩,准备利用自己的学识打败司机的阴谋。


给出计费表的表面读数,返回实际产生的费用。

输入描述

只有一行,数字N,表示里程表的读数。

(1<=N<=888888888)。

输出描述

一个数字,表示实际产生的费用。以回车结束。

用例

输入 5

输出 4

说明 5表示计费表的表面读数。4表示实际产生的费用其实只有4块钱。

输入 17

输出 15

说明 17表示计费表的表面读数。15表示实际产生的费用其实只有15块钱。

输入 100

输出 81

说明 100表示计费表的表面读数。81表示实际产生的费用其实只有81块钱。

解题思路

计费表从1开始计数,直到3,然后跳过4,继续从5计数。这意味着计费表上的每一位数字实际上只有9种可能的值:0, 1, 2, 3, 5, 6, 7, 8, 9(跳过了4)。因此,这个计费表实际上是在使用一个基数为9的数制系统。


输入:5

输出:4


输入:17

输出:15


输入:100

输出:81


输入:27

输出:24


输入:58

输出:43

通过将表面读数视为9进制数,并将其转换为10进制数,同时考虑到跳过的4,我们可以得到实际产生的费用。

代码

// 出租车计费/靠谱的车
#include <stdio.h>
#include <string.h>

int main() {
    char line[10];
    scanf("%s", line); // 读取输入的表面读数

    int correct = 0;           // 初始化实际产生的费用
    int length = strlen(line); // 获取输入字符串的长度

    // 遍历读数的每一位数字
    for (int i = 0; i < length; i++) {
        int digit = line[i] - '0'; // 将字符转换为数字

        // 如果数字大于4,则需要减1,因为跳过了数字4
        if (digit > 4) {
            digit--;
        }

        correct = correct * 9 + digit; // 更新实际产生的费用
        // 初始一定是0*9+最高位数字,接着最高位数字乘9+次高位(处理之后的次高位)
    }

    // 输出实际产生的费用
    printf("%d\n", correct);

    return 0;
}
相关文章
|
4月前
|
新零售 人工智能 监控
无人便利店和自动售货机
无人便利店和自动售货机
96 5
|
人工智能 达摩院 自然语言处理
“喊一嗓子”就能买票!北京机场地铁全线开通语音购票
从首都机场到北京市区,你是否遇到过不知道该怎么坐地铁买票换乘的问题? 如今,语音AI来了,“喊一嗓子”就能快速购票进站!
221 0
“喊一嗓子”就能买票!北京机场地铁全线开通语音购票
从充电到智能换电,绿色出行这张“网”究竟该怎么铺?
对于庞大的继续智能换电服务的市场来说,仅立足产品本身并不足够。
663 0
|
物联网
央视和阿里云爆改一间房,帮视障人群回归正常世界
7月28日,央视《秘密大改造》节目展示了一项终极挑战,为一位视障人士改造房屋。阿里云IoT工程师代立晨志愿参与挑战,他在两周时间里,通过大量的传感设备、网络设置、传输指令,让这间69平米的房子仿佛被赋予生命,它“能听会看”,可以认识主人、陪伴主人、照顾主人。
3365 0
|
自动驾驶
Waymo无人出租车年底发射,现已进入定价环节 | 公交部门竟成友军?
按照Waymo的计划,今年年底之前,他们的无人出租车服务就要进入市场了。现在,无人的士已进入了定价环节,紧张刺激。
1075 0