首页 > 试题广场 >

反序数

[编程题]反序数
  • 热度指数:37845 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321)
求N的值

输入描述:
程序无任何输入数据。


输出描述:
输出题目要求的四位数,如果结果有多组,则每组结果之间以回车隔开。
示例1

输入

输出

#include <stdio.h>
void to_array(int num,int a[])
{
    for(int i = 0;i < 4;i++)
    {
        a[i] = num % 10;
        num /= 10;
    }
}
int main()
{
    int a[4],reverse;
    for(int i = 1000;i < 10000;i++)
    {
       to_array(i,a);
       reverse = 0;
       for(int j = 0;j < 4;j++)
       {
           reverse *= 10;
           reverse += a[j];
       }
       if(i * 9 == reverse)
           printf("%d\n",i);
    }
    return 0;
}

发表于 2021-02-14 20:07:08 回复(0)
Java解法
public class Main {
    public static void main(String[] args) {
        for (int i = 1000; i < 2000; i++) {
            String reverse = new StringBuilder().append(i * 9).reverse().toString();
            if (reverse.equals(String.valueOf(i)))
                System.out.println(i);
        }
    }
}


发表于 2020-03-06 16:55:26 回复(0)
#include <cstdio>
int main(){
    printf("1089");
}

发表于 2019-03-05 08:51:29 回复(5)
直接计算就好,不用转换为字符串,直接转化为反序数
#include<iostream>
using namespace std;
int main(){
    for(int i=1000;i<=9999;i++){
        int temp=i,total=0;
        while(temp>0){
            total=total*10+temp%10;
            temp/=10;
        }
        if(total==i*9)
            cout<<i<<endl;
    }
}

发表于 2019-03-01 11:01:42 回复(3)
public class Main{
    public static void main(String[] args){
        //所求数字首位必为1,末位必为9
        //设四位数为1ab9,则翻转数为9ba1
        int a;
        int b;
        
        for(a = 0 ; a < 10; a++){
            for(b = 0; b < 10; b++){
                                //a b 满足的关系为890*a+80==10*b
                if(890*a + 80 == 10*b){
                    System.out.println(1000 + a*100 + b*10 + 9);
                }
            }
        }
    }
}


编辑于 2020-03-21 10:58:34 回复(0)
 #include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<math.h>
#include<map>
using namespace std;
int main()
{
      cout<<1089;
    return 0;
 } 
这是数学题
发表于 2019-02-21 15:42:47 回复(1)
#include <bits/stdc++.h>
using namespace std;

int reverse (int x){
	int revx=0;
	while(x!=0){
		revx*=10;
		revx+=x%10;
		x/=10;
	}
	return revx;
}

int main(){
	for(int i=1000;i<=9999;i++){
		if(9*i==reverse(i)){
			printf("%d\n",i);
		}
	}
	return 0;
}


使用reverse()函数求出每个的反序数,再从1000到9999枚举就好了。求反序数可以认为是一个循环,逐渐掏空x,丰富revx。
发表于 2021-06-18 20:45:51 回复(0)
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	for(int i=1000; i<10000; i++)
	{
		int j = i;
		int x = 3;
		int sum = 0;
		while(j)
		{
			sum += j % 10 * pow(10, x--);
			j /=10;
		}
		if(sum == i*9)
			cout << i << endl;
	}
	return 0;
}

发表于 2021-02-14 18:00:13 回复(0)
#include<bits/stdc++.h>
int main(){
    for(int j=0;j<2;j++)
        for(int k=0;k<10;k++)
            for(int l=0;l<10;l++)
                if(((1000+j*100+k*10+l)*9)==(l*1000+k*100+j*10+1))
                    printf("%d\n",1000+j*100+k*10+l);
}
发表于 2019-03-04 16:12:25 回复(0)
#include <stdio.h>
int main() {    
    printf("%d",1089);
}
发表于 2025-03-12 15:04:15 回复(0)
a = list(range(1,10000))
reverse_num = []
for i in a:
    num_1=str(i)
    reverse_num=num_1[::-1]
    num_2 = int(reverse_num)
    if int(num_1)*9==num_2:
        print(i)
发表于 2025-01-22 16:32:46 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int n;
        int reverse;
        for(int i = 1000;i <= 9999;i++){

            reverse = (i/1000)+(i/100 - (i/1000)*10)*10+(i/10-(i/100)*10)*100+(i-(i/10)*10)*1000;
            if((9*i) == reverse){
                System.out.println(i);
            }
    }
}
}
发表于 2025-01-10 14:11:51 回复(0)
#include <stdio.h>

int reversenum(int m) {
    int n;
    n = m / 1000 + (m % 1000 / 1000) * 10 + (m % 100 / 10) * 100 + (m % 10) * 1000;
    return n;
}

int main() {

    for (int i = 1000; i < 10000; i++) {
        if (i * 9 == reversenum(i)) {
            printf("%d\n", i);
        }
    }

    return 0;
}

发表于 2024-04-09 18:13:01 回复(0)
这个数字肯定是以1开头9结尾的,所以直接进行中间两位数字的100次循环就好了,reverse函数也可以省去
#include <stdio.h>

int main(){
    for (int i = 0; i < 10; i++){
        for (int j = 0; j < 10; j++){
            if ((1009 + 100 * i + 10 * j) * 9 == (9001 + 10 * i + 100 * j))
                printf("1%d%d9\n", i, j);
        }
    }
    
    return 0;
}

发表于 2022-02-11 12:55:25 回复(0)
注意题目要求是四位数,所以不能全为0
#include <iostream> 
#include <cstdio>

using namespace std;

int main()
{
    for(int a = 1; a <= 9; ++a)
        for(int b = 0; b <= 9; ++b)
            for(int c = 0; c <= 9; ++c)
                for(int d = 0; d <= 9; ++d)
                    if((1000*a + 100*b + 10*c + d)*9 == 1000*d + 100*c + 10*b + a)
                    {    
                        int x = 1000*a + 100*b + 10*c + d;
                        printf("%d\n", x);
                    }
    return 0;
}
发表于 2021-02-23 11:54:17 回复(0)
#include<stdio.h>
int fanxu(int n)
{
    int sum=0;
    while(n)
    {
        sum=sum*10+n%10;
        n=n/10;
    }
    return sum;
}
int main()
{
    int i,key;
    for(i=1000;i<10000;i++)
    {
        key=fanxu(i);
        if(key==i*9)
            printf("%d\n",i);
    }
}

发表于 2020-03-23 19:39:40 回复(1)
#include <bits/stdc++.h>
using namespace std;

int main()
{
    for(int i = 1000; i < 10000; i++)
    {
        string s = to_string(i);
        reverse(***egin(),s.end());
        int j = stoi(s);
        if(i*9 == j)
        {
            cout << i << endl;
        }
    }
    return 0;
}

发表于 2019-05-22 18:30:35 回复(0)
#include <iostream>
#include <string>
#include <algorithm> // 包含 reverse 函数

using namespace std;

int main() {
    for (int N = 1000; N <= 9999; ++N) {
        string numStr = to_string(N);
        string reversedStr = numStr;
        reverse(reversedStr.begin(), reversedStr.end());

        // 将反转后的字符串转换回整数
        int reversedNum = stoi(reversedStr);

        // 判断是否满足条件
        if (9 * N == reversedNum) {
            cout << N << endl;
        }
    }
    return 0;
}
发表于 2025-03-21 00:11:28 回复(0)
#include <stdio.h>
int main() {
    int a,b,c,d;
    for (a=0; a<10; a++) {
        for (b=0; b<10; b++) {
            for (c=0; c<10; c++) {
                for (d=0;d<10;d++) {
                if ((1000*a+100*b+10*c+d)*9==(1000*d+100*c+10*b+a)&&a!=b!=c!=d!=0) {
                printf("%d%d%d%d\n",a,b,c,d);
                }
                }
            }
        }
    }
    return 0;
}
发表于 2025-02-27 20:48:01 回复(1)
发表于 2025-02-03 16:35:52 回复(0)

问题信息

上传者:小小
难度:
111条回答 8839浏览

热门推荐

通过挑战的用户

查看代码
反序数