C语言问题:求“中轴对称”的数

来源:百度知道 编辑:UC知道 时间:2024/07/02 15:04:16
具体原题我也记不太清楚了,大致意思是:
求一个100至1000以内的数,满足其本身、其平方、其立方(不考虑平方和立方位数)最高位与最低位数字相同、次高位与次低位数字相同……以此类推,类似中轴对称的数。

请求高手知道,去年C语言考试俺就栽在这道题上了……哭啊~

难点就是在判断一个数是否对称,直接判断不太容易,可以改为先求此数的逆序,然后与原数比较是否相等就可以了。下面是判断一个数的逆序与原数是否相同的函数。
int iIsSymmetry(int iPrimary)
{
int iRevers=0;
int i;
for(i=iPrimary;i>0;i=i/10){
iRevers=iRevers*10+i%10;
}
if(iRevers==iPrimary){
return 1;
}else{
return 0;
}
}

#include <stdio.h>
int digit(long n)
{
int ct=0;
while(n) n/=10,ct++;
return ct;
}
int xth_of_n(long n,int x)
{
int i;
for(i=1;i<x;++i) n/=10;
return n%10;
}
int ok(long n)
{
int i;
for(i=1;i<=digit(n)/2;++i)
if(xth_of_n(n,i)!=xth_of_n(n,digit(n)+1-i)) return 0;
for(i=1;i<=digit(n*n)/2;++i)
if(xth_of_n(n*n,i)!=xth_of_n(n*n,digit(n*n)+1-i)) return 0;
for(i=1;i<=digit(n*n*n)/2;++i)
if(xth_of_n(n*n*n,i)!=xth_of_n(n*n*n,digit(n*n*n)+1-i)) return 0;
return 1;
}
int main()