**已关闭。**此问题需要debugging details。它目前不接受回答。
编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答这个问题。
9天前关闭。
Improve this question
//25. complement of a base 10 integer **important**
int n,answer=0;
cout<<"enter a number:";
cin>>n;
int m=~n;
int i=0;
while(n!=0){
int bit=n&1;
answer=(bit*pow(10,i))+answer;
n>>1;
i++;
}
int mask=0;
int j=1;
while(j<=i){
mask=(mask<<1)|1;
j++;
}
answer=mask&m;
cout<<answer;
我写了一段代码来得到一个整数值,比如5
,也就是二进制的101
,我应该得到010
,它对应于010
,它对应于2
,但它不是这样的。
2条答案
按热度按时间z0qdvdin1#
所提出的问题是高度模糊的,任何“补充”都应该是可逆的(这不是)。然而,在Leetcode问题的约束下(并且需要C++20),下面的代码应该可以解决它。
编辑:说明:假设你有一个整数n。然后(啊哈)“补数”正是填充交错0的补数。举例来说:
字符串
如果你把它们加在一起,你会得到(没有进位):
型
所以“补数”是“全1”减去原来的数。
你可以用通常的方法得到“全1”,从2的下一个幂开始,然后减去1。这里不会发生溢出,因为从
int
转换为unsigned
会留出空间乘以2。型
输出(发现模式?):
型
laik7k3q2#
下面的代码适用于您提供的示例。它不能解决零或负值(结果都是零)的模糊性。
字符串
如果要求0 -> 1,则将其视为特殊情况:
型