菜鸟急求C语言编程答案——指针

2025-01-24 10:57:31
推荐回答(3个)
回答1:

#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时退出程序,可循环测试。。。。

回答2:

#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!"< cin.clear();//reset input
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=0;i++,j--)
{
*(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

回答3:

// 判断是否为回文数
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;

};