zoukankan      html  css  js  c++  java
  • 10041-回文数

    题目地址:http://39.105.45.77/problem/10041

    回文数

    Description

    回文数是一个有意思的数字,例如:“上海的自来水来自海上”,这就是一个回文数,回文数的特点是从左边读和从右边读是一样的。现在请你判断一些数,他们是不是回文数。

    Input

    1、测试有多组数据,每组数据的第一行输入一个数 a , 保证 a <200;

    2、每组数据有 a 个数,保证这些数字<10,000,000;

    Output

    输出:如果这个数字数一个回文数,则输出"YES",否则输出"NO",

    每个数字后面要划行,同时,每一组数据中间换行。

    Sample Input 1 

    3
    1
    2
    3

    Sample Output 1

    YES
    YES
    YES

    Sample Input 2 

    2
    101
    220221
    
    2
    2023
    333

    Sample Output 2

    YES
    NO
    
    NO
    YES

    该题目需要特别注意"测试有多组数据"。其难度不是很大,给出以下AC解决代码。
     1 /*
     2  * 作者: 廖乾佳
     3  */
     4 #include<stdio.h>
     5 #include<string.h>
     6 #include<stdlib.h>
     7 int main()
     8 {
     9     int n, leng, flag, i, j, k;
    10     char str[12];
    11     while (scanf("%d
    ",&n) != EOF) {//读取n组数据
    12         for (i = 1; i <= n; i++) {//读取每一组数据中的数值
    13             flag = 1;
    14             memset(str, 0, sizeof(str));//为str数组初始化内存。这行代码不要也行,因为char str[12];已经初始化内存了
    15             gets(str);
    16             leng = strlen(str);
    17             for (j= 0, k = leng - 1; j< (leng - 1) / 2 + 1; j++, k--) {//从前往后对比
    18                 if (str[j] != str[k]) { flag = 0; break; }//期间有一个不匹配就退出循环
    19             }
    20             if (flag == 1) { printf("YES
    "); }//根据标志判断输出结果
    21             else if (flag == 0) { printf("NO
    "); }
    22         }
    23         printf("
    ");
    24     }
    25     return 0;
    26 }
    27 //点评:做法简洁干练,思路清晰。memset看起来有点画蛇添足了。可以完全省略

    下一个代码与楼上解法是一样的,但是代码更加清晰:

     1 /**
     2  * 作者: test
     3  */
     4 #include <stdio.h>
     5 #include <string.h>
     6 int main()
     7 {
     8     int i,j,length,flag=1;
     9     char num[100]; 
    10     int n;
    11     while(scanf("%d",&n) != EOF)
    12     {
    13         char m=getchar();     //吞掉回车符号 
    14         
    15         for( i = 0;i < n;i++)
    16         {
    17             gets(num);
    18             length=strlen(num);        
    19             for(j = 0;j <= (length-1)/2;j++)
    20             {
    21                 if(num[j] != num[length-1-j])
    22                 {
    23                     flag=0;
    24                     break;
    25                 }        
    26             }    
    27             if(flag == 1)//判断是否为回文数    
    28             {
    29                 printf("YES
    ");
    30             }
    31             else
    32             {
    33                 printf("NO
    ");
    34             }    
    35             
    36             flag=1;                
    37         }   
    38       printf("
    ");
    39     }
    40     return 0;
    41 }

    下面来看作者的解法(C++)最常规的位数计算:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int plalindrome(int n)///  判断回文
     4 {
     5     int num = 0;
     6     int temp = n;
     7     while(temp)
     8     {
     9         num = num*10+temp%10;
    10         temp/=10;
    11     }
    12     if(n==num)
    13         return 1;
    14     else
    15         return 0;
    16 }
    17 int main()
    18 {
    19     int a;
    20     while(~scanf("%d",&a))
    21     {
    22         int temp ;
    23         for(int i = 0;i<a;i++){
    24             scanf("%d",&temp);
    25             if(plalindrome(temp)){
    26                    cout<<"YES"<<'
    ';
    27             }else{
    28                 cout<<"NO"<<'
    ';
    29             }
    30         }
    31         cout<<'
    ';
    32     }
    33     
    34     return 0;
    35 }

    测试数据:

    测试点一:
    3
    3
    111111
    202
    测试点二:
    3
    121
    2220
    20203
    
    4
    21
    23
    222
    1000001
    测试点三:
    100
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    1000001
    测试点四:
    10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1010101
    测试点五:
    10
    101
    202
    303
    404
    505
    60601
    108463
    3847433
    344553
    345456
    
    1
    1000001


  • 相关阅读:
    C#语法相比其它语言比较独特的地方
    Git源码管理工具使用
    2018年第九届蓝桥杯题目(C/C++B组)汇总
    Unity插件系列之二维码
    在本机使用虚拟机安装一个linux系统,并搭建ftp服务器
    用UE4蓝图制作FPS_零基础学虚幻4第二季
    【坦克大战】Unity3D多人在线游戏(泰课的坦克大战--旋转的螺丝钉)
    Drag(拖拽)和Move(移动)两个脚本
    解决:Word在试图打开文件时遇到错误
    2018年的一些记录,共勉
  • 原文地址:https://www.cnblogs.com/xwxz/p/11988197.html
Copyright © 2011-2022 走看看