首页 > 学院 > 开发设计 > 正文

【九度OJ】题目1064:反序数 解题报告

2019-11-06 07:02:13
字体:
来源:转载
供稿:网友

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表