【九度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 日

posted @ 2017-03-05 21:07  负雪明烛  阅读(24)  评论(0编辑  收藏  举报