检查另一个数字是否包含在其中的程序
检查另一个数字是否包含在其中的程序
我最近刚刚开始尝试编程,我遇到一个问题,已经好几天了,最接近的可能是一个检查一个数字是否包含一个特定数字的程序,但我认为它并不适用于我的情况。问题是让用户输入两个正数,然后检查第二个数的反向是否包含在第一个数中。例如,如果您输入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日
你越是过度思考管道, 就越容易堵塞排水口. -- Scotty, 星际迷航III
如果把这个任务分成两个部分, 就会容易许多:
-
反转一个整数的数字.
-
在第二个整数中搜索第一个部分计算得到的反转整数.
对于第一部分, 假定 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;
完整程序如下:
#includeint 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; }