算法第一题
2015-10-24 11:35
337 查看
/*********************************************************** 输入:k 10<= k <=10^18 long long int 64位 > 18ln(10)=41.44 输出:第k位字符 "0" / "1" len(fn)=2^(n+1)-1, len(f0)=1 copyright qinxiankang@gmail.com 2013301500100 计科三班 秦贤康 2015.10.23 ***********************************************************/ #include <stdio.h> #include <stdlib.h> #include <math.h> //#define DEBUG 1 struct F{ char * str; int len; }; int conv(int); int main(void) { unsigned long long int k=0; scanf("%d",&k); #ifdef DEBUG for(int i=1;i<16;i++) printf(conv(i)==-1?"1":"0"); #endif printf(conv(k)==-1?"1":"0"); return 0; } int conv(int k) { int t, n, r; //t:阶 n:此阶总数 r:对称数 if(k==0)return -1; else t = (int)( log(k)/log(2) ); n = (int)pow(2,t) - 1; r = k-n-1; #ifdef DEBUG printf("k=%d->层数:t=%d ",k,t); printf("对称点:n=%d\n ",n); printf("总数:%d\n",2*n+1); printf("k:%d->r:%d\n",k,r); #endif return -conv(r); }
相关文章推荐
- SpringMVC @RequestParam 注解
- Comparator 和 Comparable
- hdu 1257 最少拦截系统(dp)
- 排序算法——选择排序
- LinuxCNC+EtherCAT(4)之LinuxCNC overview
- Linux内核定时器
- Shell简介:什么是Shell,Shell命令的两种执行方式
- Android - DrawerLayout
- 我摘抄的webstorm快捷键仅仅自己做参考使用
- iOS 动态更新
- String课后作业
- Objective-C复合
- hbase小结
- 虚拟机(Vmware)怎么进入BIOS
- Android Studio引用GitHub上的库 viewPagerIndicater
- 通过反射了解泛型的本质
- 去除字符串重复部分
- Linux OS下分区的擦除与重写
- 石子归并问题(codevs 1048)
- windows command