去2的幂
时间限制: 1 Sec 内存限制: 16 MB题目描述
给出二个任意的正整数
N
,
K
(
1<=N<=10000
,
0<=K<N
),然后进行如下操作:
(
1
)从
N
中连续减去
2R
(
R=0
,
1
,
2
,
3
,
...
)
(
2
)当剩余的数不够减时,则将其加上
K
,再重复(
1
)的操作过程。
(
3
)若剩余的数为
0
时,则结束操作并输出进行减法的次数。
(
4
)若存在永远不能减完的情况,则输出信息“
ERROR
!”。
例如:当
N=4
,
K=2
时,操作过程如下:
1
)
4-1=3
减
20
2
)
3-2=1
减
21
由于不够减,所以加
K
的值
2
,得:
N=1+2
=
3
3
)
3-1=2
减
20
4
)
2-2=0
减
21
此时结果为
0
,则输出:
STEP=4
(表示进行了
4
次减法操作运算)
又如:当
N=2
,K=
1
时,操作过程如下:
1
)
2-1=1
减
20
由于不够下次减,所以加
K
的值
1
,得:
N=1+1=2
2
)
2-1=1
减
20
…………
在这种情况下,永远不能减完,则输出信息“ERROR!”
输入
一行,两个整数 N K。
输出
一个整数或‘ERROR’。
样例输入
4 2
样例输出
4
我的代码:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n,k,count=0,sum=0;
cin >> n >> k;
while (n!=0)
{
if (n-(1<<count)<0)
{
n+=k;
sum+=count;
count=0;
}
if (!(n&1)&&k&1)
{
cout << "ERROR" << endl;
return 0;
}
n-=(1<<count);
count++;
}
cout << sum+count << endl;
return 0;
}
#include <iostream>
using namespace std;
int main( void )
{
int n, k;
cin >> n >> k;
bool have[ 10001 ] = { 0 }, noover = false;
have[ n ] = true;
int s, step = 0;
while( true )
{
have[ n ] = true;
s = 1;
while( n >= s )
{
n -= s;
step ++;
s <<= 1;
}
if( !n ) break;
n += k;
if( have[ n ] )
{
noover = true;
break;
}
}
if( noover )
cout << "ERROR" << endl;
else
cout << step << endl;
return 0;
}