歐拉計劃002 二進制和十進制的迴文數

題目:

寫出100萬以下所有十進制和二進制表示都是迴文的數字之和。

解題思路:

答案:872187.
100萬一下的十進制,肯定要小於7位數的,所以先暴力把所有的十進制迴文數求出存到數組裏面。這樣就只有1900+,節省了很大一部分時間。然後就是基本的二進制判斷是否迴文。

程序代碼:

#include <stdio.h>
#include <string.h>

int main()      //872187
{
    int a[10000],b[1010];
    int i,j,k,t=0,sum;
    memset(a,0,sizeof(a));
    for(i=1;i<10;i++){      //十進制迴文數存到數組中,大概1900+ 
        a[t++]=i;
        a[t++]=i*10+i;  
        for(j=0;j<10;j++){
            a[t++]=i*100+j*10+i;
            a[t++]=i*1000+j*100+j*10+i;
            for(k=0;k<10;k++){
                a[t++]=i*10000+j*1000+k*100+j*10+i; 
                a[t++]=i*100000+j*10000+k*1000+k*100+j*10+i;    
            }
        }
    }sum=0;
    for(j=0;j<t;j++){
        k=0;
        int ss=a[j];
        memset(b,0,sizeof(b));//十進制轉二進制存到數組裏面 
        while(a[j]){    
            b[k++]=a[j]%2;
            a[j]/=2;
        }
        i=0;k--;
        while(i<=k){        //逐一進行對比        
            if(b[i]==b[k])
                i++,k--;
            else
                break;
        }
        if(k<=i){
            printf("%d\n",ss);
            sum+=ss;
        }
    }
    printf("sum=%d\n",sum);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章