首页 > 试题广场 >

回文对称数

[编程题]回文对称数
  • 热度指数:12047 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
今天牛牛学到了回文串,他想在数字里面找回文,即回文数,回文数是正着读与倒着读都一样的数,比如1221,343是回文数,433不是回文数。请输出不超过n的回文数。

输入描述:
输入一个整数n(1 <= n <= 100000)


输出描述:
从1开始按从小到大的顺序输出所有回文数
示例1

输入

10

输出

1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
bool is(int n)
{
    int x = n, res = 0;
    while (n)
    {
        int e = n % 10;
        res =  res * 10 + e;
        n /= 10;
    }
    if (res == x) return true;
    return false;
}

int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i ++ )
    {
        if (is(i)) cout << i << endl;
    }
}

发表于 2022-02-26 14:23:59 回复(0)
#include <stdio.h>
#include <math.h>
void judge(int num)
{
    int count = 0;
    int sum = 0;
    int tmp = 0;
    int n = num;//避免影响num的值
    int m = num;//
    while (n)//判断数字位数
    {
        count++;
        n /= 10;
    }
    while (m)
    {
        tmp = m % 10;
        m /= 10;
        sum += tmp * pow(10, --count);//倒置数字
    }
    if (num == sum)//判断
    printf("%d\n", sum);
}
int main()
{
    int n = 0;
    int i = 1;
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
    {
        judge(i);
    }
    return 0;
}

发表于 2022-08-18 17:19:29 回复(0)
int main()
{
    int n, i, ind;
    int j = 0;
    char arr[8] = { 0 };
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
    {
        int tmp = i;
        int mad = i;
        int count = 0;
        while (mad)
        {
            arr[count] = mad % 10;
            mad = mad / 10;
            count++;
        }
        if (1 == count)
        {
            printf("%d\n", tmp);
        }
        else
        {
            //奇数偶数都一样
            ind = count / 2;
            for (j = 0; j < ind; j++)
            {
                if (arr[j] != arr[count - 1 - j])
                    break;
            }
            if (j == ind)
                printf("%d\n", tmp);
        }
    }
    return 0;
}

发表于 2022-04-18 18:29:03 回复(0)
n = int(input())
for i in range(1,n+1):
    if str(i) == str(i)[::-1]:
        print (i)
    else:
        x = 1 #没什么用 就是为了不影响循环哈哈
        

发表于 2022-03-03 13:23:54 回复(0)
#include<stdio.h>
int main(){
    int n , i;
    scanf("%d",&n);
    for(i = 1 ; i <= n ; i++ )
    {
        //一位数 中的全部回文数
        if( i < 10 )
        {
            printf("%d \n",i);  
            continue;
        }
        //两位数 中的全部回文数
        else if( i < 100 )
        {
            int one = i % 10;
            int ten = i / 10;
            if( one == ten ) printf("%d \n",i);  
            continue;         
        }
        //三位数 中的全部回文数
        else if( i < 1000 )
        {
            int one = i % 10;
            int hun = i / 100;
            if( one == hun ) printf("%d \n",i);  
            continue;
        }
        //四位数 中的全部回文数
        else if( i < 10000 )
        {
            int one = i % 10;
            int thou = i / 1000;
            int hun = ( i - thou * 1000 ) / 100;
            int ten = ( i - thou * 1000 - hun * 100 ) / 10;
            if( one == thou && ten == hun ) printf("%d \n",i); 
            continue;
        }
        //五位数 中的全部回文数
        else if( i < 100000 )
        {
            int one = i % 10;
            int ten_thou = i / 10000;
            int thou = ( i - ten_thou * 10000 ) / 1000;
            int ten = i % 100 / 10;
            if( one == ten_thou && ten == thou ) printf("%d \n",i); 
            continue;
        }
    }
    return 0;
}

发表于 2022-06-16 11:51:43 回复(0)
#include <stdio.h>
void ispal(int num)
{
    int a[6] = { 0 },i = 0,cnt = 0,flag = 1;
    int tem  = num;
    while (tem > 0)
    {
        a[i] = tem%10;
        tem /= 10;
        i++;
        cnt++;//几位数
}
    for (int i = 0; i < cnt/2;i++)
    {
        if (a[i] != a[cnt-i-1]) flag = 0;
    }
    if (flag) 
        printf("%d\n",num);
}

int main()
{
    int n = 0;
    scanf("%d",&n);
    for (int i = 1;i <= n;i++)
        ispal(i);
    return 0;
}

发表于 2022-03-11 21:11:23 回复(0)
int main() {
    int n, sum, b;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        b = i;
        sum = 0;
        while (b) {
            sum = sum * 10 + b % 10;
            b /= 10;
        }
        if (sum == i) {
            printf("%d\n", sum);
        }
    }
    return 0;
}

发表于 2022-09-01 20:17:12 回复(2)
#include<stdio.h>

void fun(int num)
{
    int arr[5], n, i, j;
    n = num;
    for (i = 0; i < 5; i++) {
        arr[i] = n % 10; 
        n = n / 10;
        if (n == 0) { break; }
    }
    for (j = 0; j < i ; j++) {
        if (arr[j] != arr[i - j]) { return; }
    }
    printf("%d \n", num);
}

int main(void)
{
    int n, i;
    scanf("%d", &n);
    for (i = 1; i < n; i++) {
        fun(i);
    }
}
发表于 2022-02-28 14:03:01 回复(1)
#include <stdio.h>

int main()
{
    int n = 0;//输入的整数
    int m = 0;//每次判断的数
    int j = 0;//倒着读判断的数
    scanf("%d", &n);

    for (int i = 1; i <= n; i++)
    {
        m = i;
        while (m)//计算倒着读
        {
            j *= 10;
            j += m % 10;
            m = m / 10;
        }

        if (i == j)//判断并输出
            printf("%d\n", j);

        j = 0;//初始化数据
    }
    return 0;
}

编辑于 2024-02-18 14:00:32 回复(1)
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        for(int i=1;i<n;i++){
            if(isPalindrome(i)) System.out.println(i);
        }
    }
    public static boolean isPalindrome(int x){
        boolean is=true;
        String[] arr=String.valueOf(x).split("");
        for(int i=0;i<Math.ceil(arr.length/2);i++){
            if(!arr[i].equals(arr[arr.length-i-1])) is=false;
        }
        return is;
    }
}

发表于 2022-08-16 21:39:03 回复(0)
我是蠢驴,写了这么多,还是错的
<1000的数是对的,大于等于1000的数测试就错了
气死我了😭😭😭
#include <stdio.h>
int main (void)
{
    long int n;
    scanf("%ld", &n);   //要求位数比较,需分范围
     
        if (n < 10)     //个位数
        {
            for (int i = 1; i < n; i++)
                printf("%d\n", i);
        }
     
        if (10 <= n && n < 100)     //两位数
        {
            for (int i = 1; i < 10; i++)
                printf("%d\n", i);
            for (int i = 10; i <= n; i++)
            {
                if (i / 10 == i % 10)
                printf("%d\n", i);
            }
                 
        }
     
     else if (100 <= n && n < 1000)     //三位数
        {
            for (int i = 1; i < 10; i++)
                printf("%d\n", i);
            for (int i = 10; i < 100; i++)
            {
                if (i / 10 == i % 10)
                printf("%d\n", i);
            }
            for (int i = 100; i <= n; i++)
            {
                if (i / 100 == i % 100 )
                printf("%d\n", i);
            }
        }
     
       else if (n <= 1000 && n < 10000)     //四位数
        {
            for (int i = 1; i < 10; i++)
                printf("%d\n", i);
             
            for (int i = 10; i < 100; i++)
            {
                if (i / 10 == i % 10)
                printf("%d\n", i);
            }
             
            for (int i = 100; i < 1000; i++)
            {
                if (i / 100 == i % 100)
                    printf("%d\n", i);
            }
                     
            for (int i = 1000; i <= n; i++)
            {
                if (i / 1000 == i % 1000 && i / 100 % 10 == i % 100 / 10
                    && i / 10 % 10 == i / 100 % 10)
                    printf("%d\n", i);
            }  
        }
     
     else if (n <= 10000 && n < 100000)     //五位数
        {
            for (int i = 1; i < 10; i++)
                printf("%d\n", i);
             
            for (int i = 10; i < 100; i++)
            {
                if (i / 10 == i % 10)
                printf("%d\n", i);
            }
             
            for (int i = 100; i < 1000; i++)
            {
                if (i / 100 == i % 100)
                    printf("%d\n", i);
            }    
             
            for (int i = 1000; i < 10000; i++)
            {
                if (i / 1000 == i % 1000 && i / 100 % 10 == i % 100 / 10
                   && i / 10 % 10 == i / 100 % 10)
                    printf("%d\n", i);
            }  
          
            for (int i = 10000; i <= n; i++)
            {
                if (i / 10000 == i % 10000 && i / 1000 % 10 == i % 1000 / 10
                   && i / 10 % 10 == i % 1000 / 10)
                    printf("%d\n", i);
            }     
        }
         
    return 0;
}


发表于 2022-08-07 18:05:48 回复(3)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int toJudgePalindrome = scanner.nextInt();
        for(int i = 1;i <= toJudgePalindrome ;i++){
            String str = String.valueOf(i);
            StringBuffer strBuff = new StringBuffer(str);
            if(str.equals(strBuff.reverse().toString())){
                System.out.println(i);
            }
        }
    }
}

发表于 2022-06-28 15:08:45 回复(0)
#include <stdio.h>

int main() {
    int n=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        int x=0;;
        int m=i;
        while(m)
        {
            x=x*10;
            x=x+m%10;
            m=m/10;
        }
        if(x==i)
            printf("%d\n",i);
    }
    return 0;
}

发表于 2024-04-05 12:08:45 回复(0)
#include <stdio.h>

int main() {
    int n, length, count;
    char s[6] = { ' ', ' ', ' ', ' ', ' ', ' ', };
    while (scanf("%d", &n) != EOF) {
        for (int i = 1; i <= n; i++) {
            sprintf(s, "%d", i);
            length = strlen(s);
            count = length / 2;
            if (count == 0) {
                printf("%d\n", i);
            }
            for (int j = 0; j < count; j++) {
                if (s[j] != s[length - j - 1]) {
                    break;
                }
                if (j == count-1) {
                    printf("%d\n", i);
                }
            }
        }
    }
    return 0;
}
编辑于 2024-03-07 21:30:04 回复(1)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        StringBuffer str = new StringBuffer("");
        for (int i = 1; i <= a; i++) {
            if (str.append(i).reverse().toString().equals(String.valueOf(i))) {
                System.out.println(i);
            };
            str.setLength(0);
        }
    }
}

StringBuffer反转
编辑于 2024-03-01 17:12:29 回复(0)
#include <stdio.h>

int main() {
    int n = 0;
    scanf("%d", &n);
    int k = 0;
    int arr[6] = { 0 };
    int i = 0;
    if (n < 10)
    {
        for (i = 1; i <= n; i++)
        {
            printf("%d\n", i);
        }
    }
    else {
        for (i = 1; i < 10; i++)
        {
            printf("%d\n", i);
        }
        for (i = 10; i <= n; i++)
        {
            int a = 0;
            int b = i;
            int j = 0;
            while (b > 0)
            {
                arr[j] = b % 10;
                b /= 10;
                j++;
            }
            for (k = 0;; k++)
            {
                j--;
                if (arr[k] == arr[j])
                {
                    if (k == j - 1 || k == j)
                    {
                        a = 1;
                        break;
                    }
                    continue;
                }
                else {
                    a = 0;
                    break;
                }
            }
            if (a == 1)
            {
                printf("%d\n", i);
            }
        }
    }

    return 0;
}
编辑于 2024-02-15 22:52:44 回复(0)
#include <stdio.h>
int is_palindromic(int num) {

    int j = 0, arr[7], left = 0, right;
    arr[j] = num;
    //数组记录数字的每一位
    while (1) {
        arr[j + 1] = arr[j] / 10;
        if (arr[j + 1] == 0) {
            break;
        }
        arr[j] = arr[j] % 10;
        j = j + 1;
    }
    //比较数组两侧的值是否一致,即判断回文数
    right = j;
    while (left < right){
        if (arr[left] != arr[right]){
            return 0;
        }
        left += 1;
        right -= 1;
    }
    return 1;
}
int main() {
    int n, num;
    scanf("%d", &n);

    for (int i = 1; i <= n; i++) {
        num = i;
        if (i < 10)
            printf("%d\n", num);
        else {
            if (is_palindromic(num) == 1) {
                printf("%d\n", num);
            }
        }
    }
    return 0;
}
发表于 2024-02-08 15:04:35 回复(0)
Python中[::-1]表示将字符或数字倒序输出
a = int(input())
for i in range(1,a+1):
    if str(i) == str(i)[::-1]:
        print(i)


编辑于 2024-02-05 10:43:52 回复(0)
#include <stdio.h>
#include <math.h>

int main() {
    int n;
    scanf("%d", &n);
    for(int i=1; i<=n; i++){
        int a[6]={0};
        for(int x=0; x<=5; x++){
            a[x] = ((int)(i / pow(10,x)) % 10);
        }
        if(i<10){
            printf("%d\n", i);
        }else if(i<100){
            if(a[0] == a[1]){
                printf("%d\n", i);
            }
        }else if(i<1000){
            if(a[0] == a[2]){
                printf("%d\n", i);
            }
        }else if(i<10000){
            if(a[0] == a[3] && a[1] == a[2]){
                printf("%d\n", i);
            }
        }else{
            if(a[0] == a[4] && a[1] == a[3]){
                printf("%d\n", i);
            }
        }
    }
    return 0;
}
发表于 2024-01-23 17:42:41 回复(0)
#include <stdio.h>

int main() {
    int a;//a作为数据的输入
    int b = 0, c = 0, n = 0;
    int arr[6] = { 0 };
    scanf("%d", &a);
    for (int i = 1; i <= a; i++) {
        n = 0;
        c = i;
        do {
            b = c% 10;//b=c%10
            c = c / 10;
            arr[n] = b;
            n++;
        } while
            (c != 0);
        n--;
        int left = 0;
        int right = n;
        while (arr[left] == arr[right]) {//这里用数组确实麻烦了
            left++, right--;
        }
        if (left>right) {//r<l
            printf("%d\n", i);
        }
    }
    return 0;
}
发表于 2024-01-15 17:21:46 回复(0)