您的位置:首页 > 其它

poj In Danger 约瑟夫

2012-02-08 15:14 357 查看
题意:1-n每数2个便抛弃一个

将十进制转换为二进制,循环左移一位,在转换为十进制,即为解

#include <stdio.h>
#include <string.h>
#include <math.h>
int main(int argc, char *argv[])
{
int i,n,m,j;
while(scanf("%de%d",&n,&m))
{
if(n==0 && m==0) break;
while(1)
{
if(m==0) break;
n*=10;
m--;
}
i=1;
while(i<=n)
{
i<<=1; //左移必须有等于号,不然结果错误
}
i>>=1;
n=(n-i)<<1;
printf("%d\n",n+1);
}
return 0;
}
/*
循环左移方法:
例如n=7=(111)
循环结束后i=(1000)
i在右移为(100)
n-i=(11)为除了首位的数字
再将(n-i)右移+1结果便成

左移相当于*2 右移/2
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: