2022-1-16 每日一题 NowCoder KY266 反序数 (板子题)

题目描述:


链接:https://www.nowcoder.com/practice/e0d06e79efa44785be5b2ec6e66ba898

解题思路:

解法1:更优解法

利用自定义Reverse函数求反序数(模板)

知识点总结:

1.Reverse函数:求反序数
revx一定要先赋初值为0(保证每次调用时初值为0)
先*10,再加上x%10,然后x/10,循环至x为0

int Reverse(int x)
{
    int revx = 0;//一定要赋初值为0!!!
    while(x != 0){
        revx *= 10;
        revx += x % 10;
        x /= 10;
    }
    return revx;
}

代码如下:

#include<cstdio>
#include<iostream>

using namespace std;

/**方法1:Reverse求反序数(模板)**/
int Reverse(int x)
{
    int revx = 0;
    while(x != 0){
        revx *= 10;
        revx += x % 10;
        x /= 10;
    }
    return revx;
}

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

解法2:

分解n,将n的各位数字存入数组,然后和反序数rn的各位数字进行依次比较,全部相同则输出

#include<cstdio>
#include<iostream>

using namespace std;

/**方法2:逐位比较**/
int main()
{
    int n, rn, x;//rn即为reverse num
    int arr[4],i;
    for(n = 1000; n <= 9999; ++n){
        x = n;
        i = 4;
        while(x != 0){
            arr[--i] = x%10;
            x /= 10;
        }
        //反序数
        rn = n * 9;
        i = 0;
        while(rn != 0){
            if(rn % 10 != arr[i++]) break;
            rn /= 10;
        }
        if(rn == 0){
            printf("%d\n",n);
        }
    }
    return 0;
}
posted @ 2022-01-16 15:18  Jane8  阅读(90)  评论(0)    收藏  举报