首页 > 试题广场 >

回文对称数

[编程题]回文对称数
  • 热度指数:14427 时间限制: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)
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>
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)
#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)
#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 a[30];
    int n = 0;
   
    scanf("%d", &n);

    //回文数相当于换位置,后面的数一直*10,得到得结果与原来的一样
    for (int i = 1; i<=n; i++) {
        //i的值还要和sum比较
        int tmp = i;
        //sum的值每次也需要变成0,不然初值就不为0
        int sum = 0;
        while (tmp) {
            sum  = sum*10+ tmp % 10;
            tmp /= 10;
        }
        if(sum == i)
            printf("%d\n",sum);
    }
    return 0;
}

发表于 2024-06-19 02:34:46 回复(0)
#include <stdio.h>
#include <math.h>

int main()
{
    int n = 0;
    scanf("%d", &n);

    int a = 0, b = 0, j = 0, c = 0, ret = 0, i;  //a原值, b位数上的数, c 倒数
    for (a = 1; a <= n; a++)
    {
        ret = a;
        i = a;

        while (i > 0)  //计算10的i次幂
        {
            b = i % 10;
            j++;
            i = i / 10;
        }

        c = 0;
        while (ret > 0)
        {
            b = ret % 10;
            c += b * (int)pow(10, j - 1);
            ret = ret / 10;
            j--;
        }


        if (c == a)
            printf("%d\n", c);

    }
    
    return 0;
}
发表于 2024-05-05 14:42:09 回复(0)
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)
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)
n = int(input()) 
for i in range(1,n):
    if str(i) == str(i)[::-1]:
        print(i)
 

发表于 2024-09-28 17:56:57 回复(0)
#include <stdio.h>
//主要思路,将数字逐个%,将数字存到数组里,将数组首尾数字逐个比较
int main() {
    int n, num;
    scanf("%d", &n);
    int array[100] = {0};
    int i, j;
    for (num = 1; num <= n; num++)
     {
        int temp = num;
        i = 0;
        while (temp > 0)           //取数字到数组里
        {              
            array[i] = temp % 10;
            i++;
            temp = temp / 10;
        }
        for (j = 0; j <= (i - 1) / 2; j++)  //数组数字首尾逐个比较
        {
            if (array[j] != array[i - j - 1])  
            {
                break;
            }
        }
        if (j > (i - 1) / 2)            //没有发现不相等的情况
        {
            printf("%d\n", num);
        }
    }
    return 0;
}

发表于 2024-09-28 13:35:11 回复(0)
#include<stdio.h>
int test(int n)
{
    int arr[10] = { 0 };
    int j = 0;
    int count = 0;
    for (j = 0; n > 0; j++)
    {
        arr[j] = n % 10;
        n /= 10;
        count++;
    }
    int right = count - 1;
    int left = 0;
    while (left <= right)
    {
        if (arr[left] != arr[right])
            return 0;
        right--;
        left++;
    }
    return 1;
}
int main()
{
    int n = 0;
    scanf("%d", &n);
    int i = 0;
    for (i = 1; i <= n; i++)
    {
        if (test(i)==1)
        {
            printf("%d\n", i);
        }
    }
    return 0;
}
比较简单的思路
发表于 2024-09-23 19:23:32 回复(0)
#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	for (i = 1; i <= n; i++)
	{
		int temp = i;
		int tmp = 0;
		while (temp)
		{
			//每次的结果*10自加得到一个倒数
			tmp = temp % 10 + tmp * 10;
			temp /= 10;
		}
		if (tmp == i)
		{
			printf("%d\n", i);
		}
	}
}

发表于 2024-08-24 18:21:09 回复(0)
#include <stdio.h>

int main(){
    int n;
    scanf("%d", &n);
    for (int i = 1; i <=n; ++i)
    {
        int tmp = i, value = 0;
        while (tmp)
        {
            value = value * 10 + tmp % 10;
            tmp /=10;

        }
        if (value == i)
            printf("%d\n", i);
    }
    return 0;
}
发表于 2024-08-21 16:34:42 回复(0)
#include<math.h>
int main() {

    int n = 0;
    scanf("%d", &n);
    int i = 0;
    for (i = 1; i <= n; i++)
    {
        int k = i;
        int a = 0;
        while (k)
        {
           k = k / 10;
            a++;
        }
        k = i;
        int sum = 0;
        while (k)
        {
            sum+=k%10*pow(10,a-1);
            k = k / 10;
            a--;
        }
        if (sum==i)
        {
            printf("%d\n",i);
        }
    }

    return 0;
}

发表于 2024-08-13 16:23:48 回复(0)

问题信息

上传者:牛客301599号
难度:
80条回答 2054浏览

热门推荐

通过挑战的用户

查看代码
回文对称数