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;
}