您的位置:首页 > 其它

算法第一题

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: