西电C语言作业:回文数

标题    
回文数

类别
数组

时间限制    
2S

内存限制    
1000Kb

问题描述    
若一个非负整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。
判断输入的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no。

输入说明    
输入为一个整数n,0<=n<1000000000。

输出说明    
若该整数为回文数,则输出整数各位数字之和,否则输出no。

输入样例    
样例1输入
131
样例2输入
24

输出样例
样例1输出    
5
样例2输出
no

#include<stdio.h>
#include<math.h>
int main (){
	  int n,n1,n2,m=0,j,p,i,a=1,z=1,s=0,k,d,sum=0,k1,k2;//a是求首位,z是求末尾。
    scanf("%d",&n);
    n1=n;
    n2=n;
    p=1+log10(n);  //p是求n有几位数。
    i=p+1;
    j=p-1;
	if(p%2==0)     //当位数是偶数时。
	{
	  do{
     k1=pow(10,j);
     a=n1/k1;
     n1=n1%k1;
     j=j-1; 

	 z=n2%10;
	 n2=n2/10;	 
	  if(a==z){s=s+1;}
	  else s=s;
	  }
      while(j>=p/2);
     if(p==2*s)          
	  {  k=n;
      do{d=pow(10,i);
        sum=sum+n/d;
        m=m+(n/d)*d;
        n=k-m;
        i=i-1;
      }while(i>=0);
      printf("%d\n",sum);

      }else printf("no");
    }if(p%2!=0)             //当位数是奇数时。
    {
	  do{
     k1=pow(10,j);
     a=n1/k1;
     n1=n1%k1;
     j=j-1; 

	 z=n2%10;
	 n2=n2/10;	 
	  if(a==z){s=s+1;}
	  else s=s;
	  }
      while(j>p/2);
     if(p==2*s+1)         
	  {  k=n;
      do{d=pow(10,i);
        sum=sum+n/d;
        m=m+(n/d)*d;
        n=k-m;
        i=i-1;
      }while(i>=0);
      printf("%d\n",sum);

      }else printf("no");}

  return 0;
}

较为繁琐,但用的方法比较基础,容易理解。(其他知识我还没学。)
 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值