【九度OJ】题目1064:反序数 解题报告
【九度OJ】题目1064:反序数 解题报告
标签(空格分隔): 九度OJ
原题地址:http://ac.jobdu.com/problem.php?pid=1064
题目描述:
设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321)
求N的值
输入:
程序无任何输入数据
输出:
输出题目要求的四位数,如果结果有多组,则每组结果之间以回车隔开
样例输入:
样例输出:
Ways
本来很简单的题目,应该一遍A的,可是还是遇到了问题,然后借助debug才解决掉,这样不好。
想法是把各位数字分别保存下来,然后求出其倒序数,再比较。
遇到的问题有两个,一是在第一遍循环之后,存储的数字已经是倒序,第二遍不用倒序。如n为1234,那么buf里面放的是4321,因为数字/10时是先从各位数字开始放到了buf里。
第二个问题是reverse 每次循环是是赋值关系 ,不是+/关系。即把原来的reverse扩大10倍再加上当前末尾数。
#include <stdio.h>
int main() {
int n = 1000;
while (n < 2000) {//2000*9 > 10000
int buf[4];
int temp = n;
int reverse = 0;
for (int i = 0; i < 4; i++) {
buf[i] = temp % 10;
temp /= 10;
}
for (int i = 0; i < 4; i++) {//注意对各位数字顺序已经是倒序
reverse = 10 * reverse + buf[i];//不是+=
}
if (n * 9 == reverse) {
printf("%d\n", n);
}
n++;
}
return 0;
}
既然这样,说明buf[]的意义已经不复存在,下面是精简了的代码。
#include <stdio.h>
int main() {
int n = 1000;
while (n < 2000) {
int temp = n;
int reverse = 0;
while (temp > 0) {
reverse = 10 * reverse + temp % 10;
temp /= 10;
}
if (n * 9 == reverse) {
printf("%d\n", n);
}
n++;
}
return 0;
}
Date
2017 年 3 月 5 日