算法设计(如何实现不带算术运算符的减法1)

本文概述

  • C
  • Java
  • Python3
  • C#
  • 的PHP
  • C ++
  • Java
  • Python3
  • C#
  • 的PHP
编写一个程序, 从给定的数字中减去一个。不允许使用" +", "-", " *", " /", " ++", " –"等运算符。
例子:
Input:12Output: 11Input:6Output: 5

方法1
要从数字x中减去1(例如0011001000), 请翻转最右边1位之后的所有位(我们得到001100
1
111)。最后, 也将最右边的1位翻转(我们得到0011000111)以获得答案。
C
// C code to subtract // one from a given number #include < stdio.h> int subtractOne( int x) { int m = 1; // Flip all the set bits // until we find a 1 while (!(x & m)) { x = x ^ m; m < < = 1; }// flip the rightmost 1 bit x = x ^ m; return x; }/* Driver program to test above functions*/ int main() { printf ( "%d" , subtractOne(13)); return 0; }

Java
// Java code to subtract // one from a given number import java.io.*; class GFG { static int subtractOne( int x) { int m = 1 ; // Flip all the set bits // until we find a 1 while (!((x & m) > 0 )) { x = x ^ m; m < < = 1 ; }// flip the rightmost // 1 bit x = x ^ m; return x; }// Driver Code public static void main (String[] args) { System.out.println(subtractOne( 13 )); } }// This code is contributed // by anuj_67.

Python3
# Python 3 code to subtract one from # a given number def subtractOne(x): m = 1# Flip all the set bits # until we find a 1 while ((x & m) = = False ): x = x ^ m m = m < < 1# flip the rightmost 1 bit x = x ^ m return x# Driver Code if __name__ = = '__main__' : print (subtractOne( 13 ))# This code is contributed by # Surendra_Gangwar

C#
// C# code to subtract // one from a given number using System; class GFG { static int subtractOne( int x) { int m = 1; // Flip all the set bits // until we find a 1 while (!((x & m) > 0)) { x = x ^ m; m < < = 1; }// flip the rightmost // 1 bit x = x ^ m; return x; }// Driver Code public static void Main () { Console.WriteLine(subtractOne(13)); } }// This code is contributed // by anuj_67.

的PHP
< ?php // PHP code to subtract // one from a given numberfunction subtractOne( $x ) { $m = 1; // Flip all the set bits // until we find a 1 while (!( $x & $m )) { $x = $x ^ $m ; $m < < = 1; }// flip the // rightmost 1 bit $x = $x ^ $m ; return $x ; }// Driver Code echo subtractOne(13); // This code is contributed // by anuj_67. ?>

输出如下:
12

方法2(如果允许+)
我们知道, 在大多数架构中, 负数都以2的补码形式表示。对于带符号的数字的2的补码表示, 我们具有以下引理。
假设x是数字的数值, 则
?x =-(x + 1)[?用于按位补码]
两侧加2倍,
2x +?x = x – 1
要获得2x, 请向左移x一次。
C ++
#include < stdio.h> int subtractOne( int x) { return ((x < < 1) + (~x)); }/* Driver program to test above functions*/ int main() { printf ( "%d" , subtractOne(13)); return 0; }

Java
class GFG {static int subtractOne( int x) { return ((x < < 1 ) + (~x)); }/* Driver code*/ public static void main(String[] args) { System.out.printf( "%d" , subtractOne( 13 )); } }// This code has been contributed by 29AjayKumar

Python3
def subtractOne(x):return ((x < < 1 ) + (~x)); # Driver code print (subtractOne( 13 )); # This code is contributed by mits

C#
using System; class GFG {static int subtractOne( int x) { return ((x < < 1) + (~x)); }/* Driver code*/ public static void Main(String[] args) { Console.Write( "{0}" , subtractOne(13)); } }// This code contributed by Rajput-Ji

的PHP
< ?php function subtractOne( $x ) { return (( $x < < 1) + (~ $x )); }/* Driver code*/print (subtractOne(13)); // This code has been contributed by mits ?>

【算法设计(如何实现不带算术运算符的减法1)】输出如下:
12

    推荐阅读