#include
void test(int n,int *p1,int *p2)
{
int s=0,m=n;
int j,sum=0;
while(m)
{
s=s*10+m%10;
m/=10;
}
if(s == n) //判断回文数
*p1 = 1;
else
*p1 = 0;
for(j=1;j
if(n%j==0)
sum+=j;
}
if(sum==n) //判断完全数
*p2 = 1;
else
*p2 = 0;
return;
}
void main()
{
int num;
int p1,p2;
while(1)
{
printf("input the number to test(0 for exit):\n");
scanf("%d",&num);
if(num == 0)
return;
test(num,&p1,&p2);
if(p1 == 1)
printf("是回文数\n");
else
printf("不是回文数\n");
if(p2 == 1)
printf("是完全数\n");
else
printf("不是完全数\n");
}
}
完全按照要求编写,调试通过,数据检测正确。。。主函数输入0时退出程序,可循环测试。。。。
#if 1
//写一个函数,用来测试一个整数是否回文数已及是否完全数,原型如下:
//void test(int n,int *p1,int *p2);
//其中n是传入的整数,指针p1用来带回是否回文数的判断结果,指针p2用来带回是否完全数的判断结果。1表示是,0表示否。
//在main函数提醒用户输入一个整数,调用上述函数进行判断并输出最后结果
#include
#include
void test(int n,int *p1,int *p2);
int isPalindrome (int number);
int isPerfect(int number);
int main()
{
using namespace std;
int number=0,pr =0,pf=0;
do
{
//获取输入
cout<<"Please enter a number to test it is Palindrome or Perfect: ";
cin>>number;
if (cin.fail())//输入非法
{
cerr<<"your input is not a integer!"<
while (cin.get()!='\n')
{
continue;//get rid of bad input
}
}
else
{//合法时测试
test(number,&pr,&pf);
printf("Palindrome=%d , Perfect=%d\n",pr,pf);
}
cout<<"input q to exit:";
} while (cin.get()!='q');
cout<<"Done!\n";
return 0;
}
void test( int n,int *p1,int *p2 )
{
*p1 = isPalindrome(n);
*p2 = isPerfect(n);
}
//此方法实现判断数字是不是回文数
int isPalindrome(int number)
{
char s[25];
int len = 0;
itoa(number,s,10);
char * s1 = s;
len = strlen(s1);
char * s2 = new char[len+1];
s2[len]='\0';
for (int i=0,j=len-1;i
{
*(s2+i)=*(s1+j);
}
int r = strncmp(s1,s2,len);
delete [] s2;
return r==0?1:0;
}
//此方法实现判断数字是不是完全数
int isPerfect( int number )
{
int total = 0;
for (int i=number-1;i>0;i--)
{
if (number%i==0)
{
total += i;
}
}
return total==number?1:0;
}
#endif
// 判断是否为回文数
int check1(int n)
{
int arr[32]={0};
int i,j,nn=n;
i=0;
while (nn)
{
arr[i]=nn%10;
i++;
nn/=10;
}
j=i-1,i=0;
while (i
int t=arr[i];
arr[i]=arr[j];
arr[j]=t;
i++,j--;
}
nn=n,i=0;
while (nn)
{
if (nn%10 != arr[i])
return 0;
i++;
nn/=10;
}
return 1;
}
// 判断是否为完全数
int check2(int n)
{
int i,sum;
sum=0;
for (i=1;i<=n/2;i++)
if (n%i==0) sum+=i;
if (n==sum) return 1;
else return 0;
}
void test(int n,int *p1,int *p2)
{
*p1=check1(n);
*p2=check2(n);
}
// 测试
int main (void)
{
int n=6;
int p1,p2;
test(n,&p1,&p2);
cout<
return 0;
};