算法笔记练习 5.1 简单数学 问题 B: 反序数
题目
题目描述
设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321)
求N的值
输入
程序无任何输入数据。
输出
输出题目要求的四位数,如果结果有多组,则每组结果之间以回车隔开。
思路
- 用
i
遍历 1000 到 1111 的范围,若有符合条件的,输出; - 把四位数
i
的四个数位上数字拆解到长度为 4 的数组中; - 把
9 * i
的四个数位上数字以相反的方向拆解到另一个长度为 4 的数组中; - 比较两个数组,若完全相同则符合条件。
代码
#include <stdio.h>
// 若四位数 a 是 b 的反序数,返回 1,否则返回 0
int isReverse(int a, int b){
int i;
int ret = 1;
int da[4] = {0};
int db[4] = {0};
for (i = 0; i < 4; ++i){
da[i] = a % 10;
db[4-i-1] = b % 10;
a /= 10;
b /= 10;
}
for (i = 0; i < 4; ++i){
if (da[i] != db[i])
ret = 0;
}
return ret;
}
int main() {
int i;
for (i = 1000; i <= 1111; ++i) {
if (isReverse(i, i * 9))
printf("%d\n", i);
}
return 0;
}