アルゴリズムが数値を0に変更するための操作の数

負でない整数の数値を指定してください。0に変換するために必要なステップ数を返してください。現在の数値が偶数の場合は2で除算する必要があります。それ以外の場合は、1を減算します。

例1:

入力:num = 14

出力:6

説明:

ステップ1)14は偶数で、2で割ると7になります。

ステップ2)7は奇数です。1を引くと6になります。

ステップ3)6は偶数で、2で割ると3になります。

ステップ4)3は奇数です。1を引くと2になります。

ステップ5)2は偶数で、2で割ると1になります。

ステップ6)1は奇数です。1を引くと、0になります。

例2:

入力:num = 8

出力:4

説明:

ステップ1)8は偶数で、2で割ると4になります。

ステップ2)4は偶数で、2で割ると2になります。

ステップ3)2は偶数で、2で割ると1になります。

ステップ4)1は奇数です。1を引くと、0になります。

アルゴリズム1:質問の手順に従った直接実装

int NumberOfSteps1(int* arr, int num)
{
    
    
	int i, count = 0;
	for (i = 0;i < num;i++) 
	{
    
    
		if (arr[i] % 2 != 0)//不能整除  次数+1
		{
    
    
			count += (arr[i] + 1) / 2;
		}
		else {
    
       //整除
			count += arr[i] / 2;
		}
	}
	return count;
}

アルゴリズム2:すべてのビット演算子が使用されます

int NumberOfSteps2(int num)  

{
    
      

     int count = 0;  

     while(num != 0)  

     {
    
      

         ++count;  

         //num&1用来判断奇偶;num&0xfffffffe奇数-1;num>>1除以2  

         num = (num&1)!=0 ? num&0xfffffffe : num>>1;  

     }  

    return count;  

} 

おすすめ

転載: blog.csdn.net/Gunanhuai/article/details/109146387