找工作之面试题练习1

来源:互联网 发布:centos安装lnmp环境 编辑:程序博客网 时间:2024/05/16 19:07

今天实验室的林大牛给我发了一道百度面试题:

“求符合指定规则的数。
给定函数d(n) = n + n的各位之和,n为正整数,如 d(78) = 78+7+8=93。 这样这个函数可以看成一个生成器,如93可以看成由78生成。
定义数A:数A找不到一个数B可以由d(B)=A,即A不能由其他数生成。现在要写程序,找出 1至10000里的所有符合数A定义的数”

我自己实现了一下,写的实在太烂。就不贴出来,直接把大牛的代码拿过来消化吸收改进了一下,挂在这里,望各位苦逼程序猿有所收获。


#include <stdio.h>    #define MAX_AREA 1000   int DNumber(){   int mem_tmp[MAX_AREA / 32 + 1] = {0};    unsigned int tmp, j;   for (int i = 0; i < MAX_AREA; ++i){   tmp = j = i;   do {   tmp += j % 10;   j /= 10;   } while (j != 0);  if(tmp > MAX_AREA){continue;}j = 1;mem_tmp[tmp / 32] |= j << tmp % 32;  }   for (int i = 0; i < MAX_AREA; ++i){ j = mem_tmp[i/32];  if(0 == (j << (31 - i%32) >> 31))printf("%d  ",i);   }   return 0;   }int main(){DNumber();return 0;}

思路请参考http://astar.baidu.com/forum/forum.php?mod=viewthread&tid=733,无奈C中没有bool关键字,因此怎样操作int数据的位是此题的关键。


源代码测试通过。



原创粉丝点击