检查另一个数字是否包含在其中的程序

11 浏览
0 Comments

检查另一个数字是否包含在其中的程序

我最近刚刚开始尝试编程,我遇到一个问题,已经好几天了,最接近的可能是一个检查一个数字是否包含一个特定数字的程序,但我认为它并不适用于我的情况。问题是让用户输入两个正数,然后检查第二个数的反向是否包含在第一个数中。例如,如果您输入654321和345,它会说它包含它,因为345的反向是543,而654321包含那个数字。这是我一直在尝试的方法,但是它一直是一场灾难。

P.S:变量应该在整个程序中保持为整数。

#include 
using namespace std;
bool check(int longer, int shorter)
{
    int i = 1;
    int rev=0;
    int digit;
    while (shorter > 0)
    {
        digit = shorter%10;
        rev = rev*10 + digit;
        shorter = shorter/10;
    }
    cout << rev << endl; bool win=0; int left = longer / 10; //54321 int right = longer % 10; // 65432 int middle = (longer /10)%10; // 5432 int middle1; int middle2; int trueorfalse = 0; while (left > 0 && right > 0 && middle1 > 0 && middle2 >0)
    {
        left = longer / 10;        //4321   //321
        right = longer % 10;       //6543   //654
        middle1 = middle%10;        //543
        middle2= middle/10;         //432
        if (rev == left || rev == right || rev == middle1 || rev == middle2 || rev == middle)
        {
            win = true;
        }
        else
        {
            win = false;
        }
    }
    return win;
}
int main ()
{
    int longer;
    int shorter;
    int winorno;
    cout << "Please enter two numbers, first of which is longer: "; cin >> longer;
    cin >> shorter;
    winorno = check(longer,shorter);
    if (winorno==true)
    {
        cout << "It works.";
    }
    else
    {
        cout << "It doesn't work.";
    }
    return 0;
}

admin 更改状态以发布 2023年5月21日
0
0 Comments

你越是过度思考管道, 就越容易堵塞排水口. -- Scotty, 星际迷航III

如果把这个任务分成两个部分, 就会容易许多:

  1. 反转一个整数的数字.

  2. 在第二个整数中搜索第一个部分计算得到的反转整数.

对于第一部分, 假定 n 包含需要反转的数字.

int modulo=1;
int reversed_n=0;
do
{
     reversed_n = reversed_n * 10 + (n % 10);
     modulo *= 10;
} while ( (n /= 10) != 0);

最终结果是如果 n 包含数字 345, reversed_n 最终会变成 543, 而 modulo 将会是 1000. 我们需要 modulo 用于第二部分.

循环结构的原因是故意这样设定的. 如果原始数字是0, 我们希望最终的 reversed_n 也为0, 并且 modulo 为 10.

现在, 我们可以采取类似的方法搜索第二个数字, 叫做 search, 判断其中是否包含 reversed_n:

for (;;)
{
    if ((search % modulo) == reversed_n)
    {
        std::cout << "Yes" << std::endl;
        return 0;
    }
    if (search < modulo)
        break;
    search /= 10;
}
std::cout << "No" << std::endl;

完整程序如下:

#include 
int main()
{
    int search=654321;
    int n=345;
    int modulo=1;
    int reversed_n=0;
    do
    {
        reversed_n = reversed_n * 10 + (n % 10);
        modulo *= 10;
    } while ( (n /= 10) != 0);
    for (;;)
    {
        if ((search % modulo) == reversed_n)
        {
            std::cout << "Yes" << std::endl;
            return 0;
        }
        if (search < modulo)
            break;
        search /= 10;
    }
    std::cout << "No" << std::endl;
    return 0;
}

0