试求出10000以内的同构数c++
时间: 2024-09-24 12:16:37 浏览: 53
C++实现求100以内的同构数(代码有详细注释)
同构数是指两个正整数,它们的数字排列无论怎样改变顺序,得到的新数都等于原来的数。例如,121和211就是一对同构数。
在C++中,我们可以创建一个函数来检查两个字符串表示的数是否是同构数。以下是一个简单的示例程序,它遍历1到10000之间的所有整数,并检查它们是否与其反转后的数是同构的:
```cpp
#include <iostream>
#include <string>
bool areIsomorphic(const std::string& num1, const std::string& num2) {
// 遍历两个数的每个字符
for (size_t i = 0; i < num1.length(); ++i) {
if (num1[i] != num2[i] && num1[i] != num2[num1.length() - 1 - i]) { // 只需比较当前字符和其对称位置的字符
return false;
}
}
return true;
}
int main() {
for (int i = 1; i <= 10000; ++i) {
std::string strNum = std::to_string(i);
std::string reversedStrNum = strNum;
std::reverse(reversedStrNum.begin(), reversedStrNum.end());
if (areIsomorphic(strNum, reversedStrNum)) {
std::cout << "同构数: " << i << std::endl;
}
}
return 0;
}
```
这个程序首先将数字转换成字符串,然后检查原数和它的逆序数的每个字符是否对应相等。如果找到不匹配的字符,则返回false;若整个过程都通过,则输出该数。
阅读全文