算法笔记练习 5.1 简单数学 问题 B: 反序数

算法笔记练习 题解合集php

题目连接web

题目

题目描述
设N是一个四位数,它的9倍刚好是其反序数(例如:1234的反序数是4321)
求N的值算法

输入
程序无任何输入数据。数组

输出
输出题目要求的四位数,若是结果有多组,则每组结果之间以回车隔开。svg

思路

  1. i遍历 1000 到 1111 的范围,如有符合条件的,输出;
  2. 把四位数i的四个数位上数字拆解到长度为 4 的数组中;
  3. 9 * i的四个数位上数字以相反的方向拆解到另外一个长度为 4 的数组中;
  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;
}