【发布时间】:2022-08-17 23:21:29
【问题描述】:
给定整数的二进制表示为字符串 s,根据以下规则返回将其减少到 1 的步数:
如果当前数字是偶数,则必须将其除以 2。
如果当前数字是奇数,则必须将其加 1。
保证您始终可以为所有测试用例找到一个。
示例 1
输入:
s = \"1101\"
输出:
6
解释:
\"1101\" 对应十进制表示的数字 13。
步骤 1) 13 是奇数,加 1 得到 14。
步骤 2) 14 是偶数,除以 2 得到 7。
步骤 3) 7 是奇数,加 1 得到 8。
步骤 4) 8 是偶数,除以 2 得到 4。
步骤 5) 4 是偶数,除以 2 得到 2。
步骤 6) 2 是偶数,除以 2 得到 1。
#include <iostream>
#include <string.h>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s = \"1111011110000011100000110001011011110010111001010111110001\";
long int count = 0, size;
unsigned long long int dec = 0;
size = s.size();
// cout << s[size - 1] << endl;
for (int i = 0; i < size; i++)
{
// cout << pow(2, size - i - 1) << endl;
if (s[i] == \'0\')
continue;
// cout<<int(s[i])-48<<endl;
dec += (int(s[i]) - 48) * pow(2, size - 1 - i);
}
// cout << dec << endl;
// dec = 278675673186014705;
while (dec != 1)
{
if (dec % 2 == 0)
dec /= 2;
else
dec += 1;
count += 1;
}
cout << count;
return 0;
}
对于上面的输入输出应该是 85。但我的输出显示 81。对于其他测试用例它 似乎给出了正确的答案。我一直在尝试所有可能的调试,但我被卡住了。请帮帮我。
-
你有一个计划,你编写了代码来遵循这个计划。如果代码不起作用,请use the debugger 查看代码与您的计划有什么不同。然后,您要么更改代码以使代码正确遵循您的计划,要么重新开始一个新计划。 --我一直在尝试所有可能的调试-- 不,程序员永远不应该处于他们自己编写代码的位置,他们不知道代码有什么问题。
-
#include <bits/stdc++.h>不是 C++。不要那样做。 -
@Eljay 看起来这是一个有竞争力的程序员。
-
@RyanZhang 即使是一次性代码也是一个糟糕的习惯。
-
我们不关心
<bits/stdc++.h>带来的编译开销我在乎,因为我无法编译代码,因为我没有bits/stdc++.h。
标签: c++