题目1064:反序数
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:5960
解决:4251
-
题目描述:
-
设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321)
求N的值
-
输入:
-
程序无任何输入数据
-
输出:
-
输出题目要求的四位数,如果结果有多组,则每组结果之间以回车隔开
-
样例输入:
-
样例输出:
-
答疑:
- 解题遇到问题?分享解题心得?讨论本题请访问: http://t.jobdu.com/thread-7788-1-1.html
-
- 思路:其实很简单,但是已经不重要了,重要的是对于一个问题我们能想到的存在的几种解法;这里我给出几种解法。
-
- 解法一:我用的是将整型准换成字符串的思路,有点笨拙自己写的。有用到头文件《sstream》具体用法我的c/C++知识点里有讲到。
-
#include<iostream> #include<string> #include<sstream> using namespace std; int main() { for(int i=1000;i<=1111;++i) { int temp=9*i; stringstream str_temp0,str_temp1; string str0,str1; str_temp0<<i; str_temp0>>str0; str_temp1<<temp; str_temp1>>str1; if(str0[0]==str1[3] && str0[1]==str1[2]&& str0[2]==str1[1]&& str0[3]==str1[0]) cout<<i<<endl; } return 0; }
解法二:同解法一,但是处理的方式比解法一的高级。大神就是大神。 -
解法三:就是将反序数调整成正常序数,再进行比较即可。#include <iostream> #include <fstream> #include <string> #include <sstream> #include <algorithm> using namespace std; int main() { #ifndef ONLINE_JUDGE ifstream cin("d:\\OJ\\uva_in.txt"); #endif for (int i = 1000; i < 10000; i++) { int j = i * 9; if (j > 10000) break; stringstream ss; string s1, s2; ss << i << " " << j; ss >> s1 >> s2; //cout << "s1:" << s1 << " s2:" << s2 << endl; reverse(s2.begin(), s2.end()); if (s1 == s2) cout << i << endl; } return 0; }
#include <stdio.h> #include<stdlib.h> #include <string.h> int main() { int i,m,n; for(i = 1000;i < 10000;i++) { n = i; m = 0; //求反序数 while(n) { m=m*10+n%10; n=n/10; } if(m==i*9) { printf("%d\n",i); } } return 0; }
-