题目描述
有一函数f(x)不知道它的具体表达值,但知道它有以下性质:
1.函数的定义域是正整数域,值域为整数域
2.f(1)=0
3.f(2*x)=2*f(x)+1
4.函数f(x)是单调递增函数,即如果x1>x2,则f(x1)>f(x2)
根据以上性质可以确定函数f(x)的唯一表达式,现在给你一个整数x,请输出对应的函数值f(x)
输入
输入文件包含多组测试数据,每组测试数据一行,包含一个整数x(x<10^9),当x<1时程序结束
输出
对应每组输入,输出一行,每行只有一个整数,代表了x对应的函数值f(x).
样例输入
1 2 0
样例输出
0 1
分析:我们可以发现如下规律
f(2)=2 f(1)+1=1
f(4)=2 f(2)+1=3
f(8)=2 f(4)+1=7
f(16)=2 f(8)+1=15
同时题目还说函数f(x)是单调递增函数,即如果x1>x2,则f(x1)>f(x2),值域为整数域。
那么 f(2)=1 f(3)=2 f(4)=3 f(5)=4 f(6)=5 f(7)=6 f(8)=7 正好符合条件
故我们可以得出 f(n)=n-1;
#include<stdio.h>
int n;
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
else
printf("%d\n",n-1);
}
}