1. 程式人生 > 實用技巧 >反序數--清華考研機試

反序數--清華考研機試

自己嘗試使用的方法:超時了

#include <cstdio>
#include <iostream>
#include<string>
#include<cstring>
using namespace std;
int main()
{
    for(int n=1000;n<=1111;n++)
    {
        int a,b,c,d,e,f,g,h;
        int m=9*n;
        a=n-(n/10)*10;
        n=n/10;
        b=n-(n/10)*10;
        n=n/10;
        c
=n-(n/10)*10; n=n/10; d=n-(n/10)*10; e=m-(m/10)*10; m=m/10; f=m-(m/10)*10; m=m/10; g=m-(m/10)*10; m=m/10; h=m-(m/10)*10; if(a==h&&b==g&&c==f&&d==e) cout<<n<<endl; } return
0; }

看答案,自己又想了一個

#include <cstdio>
#include <iostream>
#include<string>
#include<cstring>
using namespace std;
int re(int a)
{
    int b=0;
    b+=a/1000;
    a=a-a/1000*1000;
    b+=a/100*10;
    a=a-a/100*100;
    b+=a/10*100;
    a=a-a/10*10;
    b+=a*1000;
    return b;
}
int main()
{
    for(int n=1000
;n<=9999;n++) { if(n*9==re(n)) cout<<n<<endl; } return 0; }

但是也出了一些問題,在re函式中,一開始沒給b賦值,導致b一直累加,所以最後沒得出結果。

答案使用的方法更簡潔,而且有一定的思維量。

#include <cstdio>
#include <iostream>
#include<string>
#include<cstring>
using namespace std;
int re(int a)
{
    int b=0;
    while(a!=0)//四次迴圈
    {
        b*=10;// 0*10 4*10 43*10 432*10 乘四次 
        b+=a%10;
        a=a/10;//1234 123 12 1 0 
     } 
    return b;
}
int main()
{
    for(int n=1000;n<=9999;n++)
    {
        if(n*9==re(n))
        cout<<n<<endl;
    }
    return 0;
}