当前位置:   article > 正文

来自异国的客人/幸运数字(C语言)【进制转换】_有位客人来自异国,在该国使用m进制计数

有位客人来自异国,在该国使用m进制计数

题目来自于博主算法大师的专栏:最新华为OD机试C卷+AB卷+OJ(C++JavaJSPy) https://blog.csdn.net/banxia_frontend/category_12225173.html

题目描述

有位客人来自异国,在该国使用m进制计数。该客人有个幸运数字n(n<m),每次购物时,其总是喜欢计算本次支付的花费(折算为异国的价格后)中存在多少幸运数字。问:当其购买一个在我国价值k的产品时,其中包含多少幸运数字?

输入描述

第一行输入为 k, n, m。

其中:

  • k 表示 该客人购买的物品价值(以十进制计算的价格)
  • n 表示 该客人的幸运数字
  • m 表示 该客人所在国度的采用的进制

输出描述

输出幸运数字的个数,行末无空格。当输入非法内容时,输出0

用例1

输入:

10 2 4
  • 1

输出:

2
  • 1

说明:

10用4进制表示时为22,同时,异国客人的幸运数字是2,故而此处输出为2,表示有2个幸运数字。

用例2

输入:

10 4 4
  • 1

输出:

0
  • 1

说明:

此时客人的幸运数字为4,但是由于该国最大为4进制,故而在该国的进制下不可能出现幸运数字,故而返回0

解题思路

将十进制数13转换为四进制数的步骤可以按照“除4取余,逆序排列”的方法来进行:

  1. 用13除以4,商为3,余数为1。
  2. 再将商3除以4,商为0,余数为3。
  3. 由于商已经为0,转换结束。

将得到的余数从下往上进行排列(与二进制转换类似):

  • 第一次除法余数:1
  • 第二次除法余数:3

所以,十进制数13转换成四进制数是13(即1 * 4^1 + 3 * 4^0)。在四进制中,不使用前导零,直接写作(31)_4。

代码

#include <stdio.h>
#include <stdlib.h>

int main() {
    int k, n, m; // 定义变量 k 用于存储物品价格(十进制),n 存储幸运数字,m 存储异国进制
    scanf("%d %d %d", &k, &n, &m); // 输入物品价格、幸运数字和异国进制

    // 判断输入的有效性:价格和幸运数字不应小于0,且幸运数字必须小于进制数,进制数应大于1
    if (k < 0 || n < 0 || m <= 1 || n >= m) {
        printf("0"); // 若输入非法,则输出0
        return 0;
    }

    int count = 0; // 初始化幸运数字出现次数为0
    while (k > 0) { // 当物品价格转换后仍有剩余数值时
        if (k % m == n) { // 如果剩余数值对m取余等于幸运数字
            count++; // 增加幸运数字出现的计数
        }
        k /= m; // 将物品价格转换为对应进制下的一位数值
    }
    printf("%d", count); // 输出幸运数字出现的次数
    return 0; // 程序正常结束
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  1. 读取输入:首先,通过 scanf 函数获取用户输入的三个整数参数,分别是物品价格(十进制表示)k、幸运数字n和异国采用的进制数m

  2. 验证输入合法性:检查输入值是否满足题目要求的条件。即:

    • 价格k和幸运数字n应当是非负数;
    • 进制数m必须大于1;
    • 幸运数字n必须小于进制数m
      如果输入非法,则输出0,并结束程序。
  3. 初始化计数器:设置一个变量count用于记录在转换后的 m 进制数中出现幸运数字 n 的次数,初始值为0。

  4. 循环处理:使用 while 循环对物品价格 k 进行处理,每次循环将 k 对 m 进行取余操作,判断余数是否等于幸运数字 n。如果相等,则说明找到了一个幸运数字,将计数器 count 加1。然后将 k 除以 m 向下取整,继续进行下一轮循环,直到 k 变为0为止。

  5. 输出结果:当循环结束后,输出计数器 count 的值,即为物品价格 k 在 m 进制下包含的幸运数字 n 的个数。

  6. 程序返回:最后,程序返回0,表示正常结束。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/918980
推荐阅读
相关标签
  

闽ICP备14008679号