📄 2115565_ac_15ms_32k.c
字号:
# include <stdio.h>
# include <math.h>
# include <string.h>
# include <stdlib.h>
void input()
{
int i, no, mark, l;
long n, r, ans;
char num[25];
while(scanf("%ld",&n)==1&&n)
{
no = mark = 0;
ltoa(n,num,2);
l = strlen(num);
for(i = l-1; i > 0; i--)
{
if(num[i]=='1'&&num[i-1]=='0')
{
num[i-1] = '1';
num[i] = '0';
mark = 1;
break;
}
else
if(num[i]=='1')
{
no++;
num[i] = '0';
}
}
if(mark)
{
ans = (long)pow(2,no)-1;r = 1;
for(i = l-1; i >= 0; i--)
{
ans += (num[i]-'0')*r;
r *= 2;
}
}
else
ans = (long)pow(2,l)+(long)pow(2,no)-1;
printf("%ld\n",ans);
}
}
int main()
{
input();
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -