输入一个两位数,判断是否为同构数。C语言
时间: 2023-12-14 14:36:33 浏览: 136
同构数是指将一个数的各位数字重新排列,得到的新数和原数不相等但是它们的平方却相等的数。例如,25和52就是同构数,因为它们的平方都是625。
以下是一个用C语言实现判断同构数的程序:
```c
#include <stdio.h>
int isIsomorphic(int n) {
int i, j, digits[10] = {0};
long long x = n, square1, square2;
// 统计原数的各位数字
while (x != 0) {
digits[x % 10]++;
x /= 10;
}
// 计算原数的平方
square1 = (long long)n * n;
// 依次尝试每个可能的同构数
for (i = 1; i <= 99; i++) {
// 统计同构数的各位数字
x = i;
for (j = 0; j < 10; j++) {
digits[j] = 0;
}
while (x != 0) {
digits[x % 10]++;
x /= 10;
}
// 计算同构数的平方
square2 = (long long)i * i;
// 判断是否为同构数
for (j = 0; j < 10; j++) {
if (digits[j] != 0 && digits[j] != ((square1 / j) % 10)) {
break;
}
}
if (j == 10 && square1 == square2) {
return 1;
}
}
return 0;
}
int main() {
int n;
printf("请输入一个两位数:");
scanf("%d", &n);
if (isIsomorphic(n)) {
printf("%d是同构数\n", n);
} else {
printf("%d不是同构数\n", n);
}
return 0;
}
```
在程序中,我们首先将输入的两位数的各位数字统计出来,然后计算出该数的平方。接着,我们依次尝试1到99之间的所有可能的同构数,并分别统计它们的各位数字和平方。最后,我们判断原数的各位数字能否与某个同构数的平方的各位数字一一对应,并且原数的平方等于该同构数的平方,如果满足条件则说明原数是同构数。
阅读全文