标签(空格分隔): 九度OJ
原题地址:http://ac.jobdu.com/PRoblem.php?pid=1064
设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321) 求N的值
程序无任何输入数据
输出题目要求的四位数,如果结果有多组,则每组结果之间以回车隔开
本来很简单的题目,应该一遍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;}2017 年 3 月 5 日
新闻热点
疑难解答