0
点赞
收藏
分享

微信扫一扫

牛牛打响指--大数做除法


链接:​​https://www.nowcoder.com/questionTerminal/442cbe24e08447729543510c2eb47082​​​

牛牛在地上捡到了一个手套,他带上手套发现眼前出现了很多个小人,当他打一下响指,这些小人的数量就会发生以下变化:如果小人原本的数量是偶数那么数量就会变成一半,如果小人原本的数量是奇数那么数量就会加一。现在牛牛想考考你,他要打多少次响指,才能让小人的数量变成1。

输入描述:

每个输入包含一个测试用例。
输入的第一行包括一个正整数,表示一开始小人的数量N(1<=N<=10^100)。

 

输出描述:

对于每个用例,在单独的一行中输出牛牛需要打多少次响指才能让小人的数量变成1。

示例1

输入

10000

输出

20

#include<iostream>
#include<vector>

using namespace std;
int main()
{
unsigned int N[128] = { 0 };
char temp;
int begin = 0, end = 0, res = 0;
while (scanf("%c", &temp))
{
if (temp == '\n')
break;
N[end] = temp - '0';
end++;
}
while (!(begin == end - 1 && N[end - 1] == 1))
{
if (N[end - 1] & 1) //判断奇数还是偶数
{
N[end - 1]++;
res++;
}
int flag = 0, tempV = 0;
res++;
for (int i = begin; i < end; i++) //偶数做除
{
tempV = N[i] + flag * 10;
flag = tempV & 1; //余数,余数是1或者0
N[i] = tempV >> 1;
}
if (N[begin] == 0)begin++;
}
cout << res;
return 0;
}

 

 

 

 

 

举报

相关推荐

0 条评论