求特殊自然数

(此题花了我不少时间,好在通过了。当然是用枚举算法)

总时间限制: 

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;
}

 

posted @ 2018-12-05 15:08  蒋弢  阅读(368)  评论(1编辑  收藏  举报