如果我将数字存储为整数数据类型,如何检查另一个数字中是否存在一个数字



我想检查整数是否包含其中的特定数字,即假设我们有数字 134、340、3450,我们如何检查数字是否包含 34。如果我们将数字存储为字符串,这种情况是微不足道的,但是当我们将它们存储为数组整数时是否可以这样做?

我最初的想法是,我们可能不得不使用倍数为 10 的 Modulo 运算符!

您可以使用

snprintfint转换为字符串,然后strstr检查是否存在。沿着这条线的东西:

char buffer[20] = "";
int n = 3450;
snprintf( buffer, 20, "%d", n );
printf( "%sn", strstr( buffer, "34" ) ? "present" : "not present" );

这是一个纯粹的二进制解决方案(不转换为字符串)。注意:仅限无符号值。

int main(int argc, char *argv[])
{
    std::vector<unsigned long> nums = { 3450, 1233, 3, 34, 3534, 10003400, 0 };
    const unsigned long pattern = 34;
    unsigned long mod = 10;  //power of 10 that will isolate the pattern number of digits
    while ((pattern % mod) != pattern) mod *= 10;
    //test all of the numbers in the vector
    for (const auto& num : nums) {
        auto test = num; //copy so we can mutate it.
        for (; (test % mod) != pattern && test > mod; test /= 10);
        if ((test % mod) == pattern) 
            std::cout << num << " contains " << pattern << 'n';
    }
    return 0;
}

显示:

3450 contains 34
34 contains 34
3534 contains 34
10003400 contains 34

你最初的想法是朝着正确的方向前进。第一步是计算要定位的数字中的数字。数字"34"有两位数,因此模块是 10 的 2 次方,即 100。如果数字只有一个数字,则模块为 10。如果数字有三位数字,则模块为 1000。等等。

然后,这变成了一个问题:

  1. 从要搜索的整数开始。

  2. 取整数的余数除以模数。

  3. 如果它等于您要搜索的数字,则您已完成。

  4. 否则,将
  5. 整数除以 10,然后返回到步骤 2,但在整数值达到 0(未找到)时停止。

如何计算原始模数将是你的家庭作业。

一种方法是将整数转换为字符串。下面是一个示例。请注意,此方法需要 C++11,因此请确保正确设置编译器。

    #include <iostream>
    #include <string>
    using namespace std;
    int main(){
    int num1 = 134;
    int num2 = 320;

    string temp = to_string(num1);
    if (temp.find("34") != -1){
        cout << "34 is in this integer!n";
    }
    else {
       cout << "34 isn't in this integer.n";
    }
    temp = to_string(num2);
    if (temp.find("34") != -1){
       cout << "34 is in this integer!n";
    }
    else {
       cout << "34 isn't in this integer.n";
    }
      return 0;
    }

输出:34 在这个整数中!34 不在此整数中。

另一个非字符串版本:

#include <math.h>
#include <stdio.h>
int main()
{
    int number1;
    int number2;
    printf("input number1: ");
    scanf("%d", &number1);
    printf("input number2: ");
    scanf("%d", &number2);
    int divisor = pow(10, (int)(log10(number1)) + 1);
    printf("divisor: %dn", divisor);
    while (number2) {
        if ((number2 - number1) % divisor == 0) {
            printf("Yesn");
            return 0;
        }
        number2 /= 10;
    }
    printf("Non");
    return 0;
}

使用 gcc test.c -o test -lm 构建,并测试:

test git:(master) ✗ ./test
input number1: 34
input number2: 1343403450
Yes
test git:(master) ✗ ./test
input number1: 35
input number2: 1343403450
No
(next_stock) ➜  test git:(master) ✗

相关内容

  • 没有找到相关文章

最新更新