【问题标题】:C++: finding a specific digit in a numberC ++:在数字中查找特定数字
【发布时间】:2015-12-27 10:41:50
【问题描述】:

请有人指导我如何检查integer 中是否存在特定数字。 为了代码优化,我试图避免使用strings 或任何类型的loops 来遍历integer 的所有digits。

如果我需要找出4是否存在整数,输入和输出样本如下:

示例输入:

154

样本输出:

true

所需代码:

bool ifExists(int digit, int number)
{
    if()
    {
        return true;
    }
    else
    {
        return false;
    }
}

可能的逻辑:

我相信一定有一种数学方法可以在if 条件下完成这项工作,但是我无法在cmath 库中找到这种方法。

【问题讨论】:

  • 我不知道这不涉及遍历数字中的数字序列。
  • 是什么让你相信有一种方法?
  • 我在一个编码网站上看到了这个问题,要求是找到2's的数字与最佳最优编码
  • “数字中 2 的个数”是数字问题还是 2 的最大幂的问题?
  • 虽然我很确定@StoryTeller 关于需要将一个整数分解为它的数字以找出其中是否有特定数字的需求是正确的,但这种需求不会持续存在 each 处理一系列数字时的数字!一旦分解了较大的值,就可以根据该值计算范围内其他值的位数。

标签: c++ math digits


【解决方案1】:

将整数转换为字符串,对数字进行字符串搜索。


“数学”方法也必须这样做,通过除/余数除以 10 来计算数字序列并与给定数字进行比较。

【讨论】:

  • 非常感谢您的回复 :) 请查看更新后的问题。
  • 好吧,那你可能运气不好,没有简单的方法可以从二进制表示中获取十进制表示的所有数字。 -- 在数字序列中搜索需要一个循环,所以循环禁止是一个太高的障碍。
  • 所以loop 可能是唯一的解决方案?
  • @ItbanSaeed 是的,没有循环你不能这样做。
【解决方案2】:

我认为可以采用数学方法。通过以某种疯狂的方式使用 log(x)。

但你肯定应该使用字符串或循环除以 10。log(x) 需要的资源远远超过你想要使用的方式。

此外,字符串或除以 10 比数学解决方案更容易阅读。

求数学解。

我建议您尝试将十进制数转换为二进制表示。然后可以为您要查找的数字创建一个过滤器。通过按位连接过滤器和转换后的值 & 你可以得到你想要的。我不确定这是否真的可行,但这将是我的第一个想法。

但正如我之前所说。这种方法对cpu来说会非常昂贵,并且难以阅读。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    相关资源
    最近更新 更多