求特殊自然数
(此题花了我不少时间,好在通过了。当然是用枚举算法)
总时间限制:
- 1000ms 内存限制:
- 65536kB
- 描述
-
一个十进制自然数,它的七进制与九进制表示都是三位数,且七进制与九进制的三位数码表示顺序正好相反。编程求此自然数,并输出显示。
- 输入
- 无。
- 输出
- 三行:
第一行是此自然数的十进制表示;
第一行是此自然数的七进制表示;
第一行是此自然数的九进制表示。 - 样例输入
-
(无)
- 样例输出
-
(不提供)
#include<iostream> using namespace std; int reverse(int n) { int tmp,r=0,sign; if(n==0) return 0; sign=n<0?-1:1; tmp=n*sign; do{ r=r*10+tmp%10; tmp/=10; }while(tmp); return r*sign; } int length(int n) { //求一个整数的位数 int x,r=0,sign; sign=n>0?1:-1; x=sign*n; if(x==0) return 0; while(x) { r++; x/=10; } return r; } int jz(int m,int n) { const int b=10; bool isNo1=true; int s,r,t,i=1,result=0; s=m; while(s) { t=s/n; r=s%n; if(r==0 && i==1) { isNo1=false;i++;} s=t; result=r%10+result*10; } if(isNo1==false) return result; else return result*b; } int main() { int x,y,z,n; //枚举n 若n的七进制是三位数 且逆置后是等于九进制 则输出n; for(int i=1;i<1000;++i) { x=jz(i,7); y=jz(i,9); z=reverse(x); n=length(x); if((n==3) && (z==y)) //cout<<x<<" "<<y<<" "<<z<<" "<<n<<endl; cout<<i<<endl<<y<<endl<<x; //提交时按x->y的顺序输出,结果判为错,只好改成yx的顺序,居然accept } return 0; }
志不强者智不达,言不信者行不果。