首页 > 试题广场 >

反序数

[编程题]反序数
  • 热度指数:32644 时间限制: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)
#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)
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<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 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)
注意题目要求是四位数,所以不能全为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>

using namespace std;

int main() {
    for(int i=1000; i<10000; ++i){
        int res = 0,temp = i;
        while(temp != 0){
            res = res*10  + temp%10;
            temp /= 10;
        }
        if(res == i*9) cout << i << endl;
    }
    
}

编辑于 2024-03-17 09:59:08 回复(0)
没有人用字符串来做吗
发表于 2024-03-07 17:59:38 回复(0)
简单题
#include <iostream>
using namespace std;

//求反序数 
int fan(int x){
	
	int res = 0;
	while(x){
		int t = x % 10;
		res = res * 10 + t;
		x /= 10;
	}
	
	return res;
}

int main() {
    
    for(int i = 1001;i <= 1111;i++){
    	int j = i * 9;
    	int f = fan(i);//反序数
    	if(j == f) cout<<i<<endl;
	}

    return 0;
}


编辑于 2024-02-16 10:46:48 回复(0)
#include <iostream>
using namespace std;

int reverse(int n) {    //求反序数
    int rev = 0;
    while (n) {
        rev = rev * 10 + n % 10;
        n /= 10;
    }
    return rev;
}

int main() {
    for (int i = 1000; i <= 9999; i++) {
        if (i * 9 == reverse(i)) {
            cout << i << endl;
        }
    }
    return 0;
}

编辑于 2024-02-02 10:09:40 回复(0)
#include <cstdio>
int Reverse(int n){
    int reverse=0;
    int remain=0;
    while(true){
        remain=n%10;  //注意区分清楚取余符号"%"与整除符号"/"
        n=n/10;
        reverse=reverse*10+remain;
        if(n==0){
            break;
        }
       
    }
    return reverse;
}
int main() {

    for(int i=1;i<9999;++i) {
        if (i * 9 == Reverse(i)) {
            printf("%d\n", i);
        }

    }
    return 0;
}
编辑于 2024-01-23 16:45:20 回复(0)
#include <iostream>
using namespace std;

int num_resver(int i){
    int p=0;
    while(i!=0){
        p=p*10;
        p=p+i%10;
        i/=10;
    }
    return p;
}

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

编辑于 2024-01-13 20:19:22 回复(0)
#include<cstdio>

int main() {
	for (int i = 1; i <= 9; i++) {
		for (int j = 0; j <= 9; j++) {
			for (int k = 0; k <= 9; k++) {
				for (int m = 0; m <= 9; m++) {
					if ((i * 1000 + j * 100 + k * 10 + m) * 9 == m * 1000 + k * 100 + j * 10 + i) {
						printf("%d%d%d%d\n", i, j, k, m);
					}
				}
			}
		}
	}
}

发表于 2023-03-19 20:27:29 回复(0)

问题信息

上传者:小小
难度:
103条回答 7815浏览

热门推荐

通过挑战的用户

查看代码