題目:
寫出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;
}