C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でymod(2をxに累乗)の値を検索します


この問題では、2つの値xとyが与えられます。私たちのタスクは、 y modの値を見つけることです(2をxに累乗)

問題を理解するために例を見てみましょう

Input : x = 2, y = 19
Output : 3

説明

y % 2x = 19 % 22 = 19 % 4 = 3

ソリューションアプローチ

この問題の簡単な解決策は、2 x の値を直接計算することです。 pow()関数を使用して、y%2 x の値を見つけます 。

この問題を解決する別のアプローチは、ログを使用することです。 y <2 x の値の場合 、余りはyです。この場合、

ログ2 y

また、xの最大値は63で、yの値がオーバーフローする可能性があります。したがって、modはxに等しくなります。

これらすべてを考慮に入れると、次の3つのケースがあります-

if(log y < x) -> return y
else if(x > 63) -> return y
else -> return (y % pow(2, x))

ソリューションの動作を説明するプログラム

#include <bits/stdc++.h>
using namespace std;
long long int findModVal(long long int y, int x){
   if (log2(y) < x)
      return y;
   if (x > 63)
      return y;
   return (y % (1 << x));
}
int main(){
   long long int y = 82829;
   int x = 12;
   cout<<"The value of y mod 2^x is "<<findModVal(y, x);
   return 0;
}

出力

The value of y mod 2^x is 909

  1. C++の各ツリー行で最大値を見つける

    二分木があるとすると、その木の各レベルの最大の要素を見つける必要があります。したがって、ツリーが次のような場合- その場合、出力は[3,5,8]になります。 これを解決するには、次の手順に従います- ansという配列を定義します 再帰関数solve()を定義します。これはツリーノードを取り、レベルは最初は0です。このメソッドは-のように機能します。 ノードがnullの場合は、を返します。 level =ansのサイズの場合、ノード値をansに挿入します。それ以外の場合、ans [level]:=ans[level]とノード値の最大値 呼び出しsol

  2. C++で左下のツリー値を検索

    二分木があるとします。そのツリーの最後の行の左端の値を見つける必要があります。したがって、ツリーが次のような場合- 最後の行が[7、4]であり、左端の要素が7であるため、出力は7になります。 これを解決するには、次の手順に従います- 最初にansとlvl変数を0として定義します solve()と呼ばれる1つのメソッドを定義します。これはツリーノードを取り、レベルは最初は0です。これは次のように機能します- ノードがnullの場合は、を返します。 lvlの場合、ans:=ノードの値およびlvl:=level 解決(ノードの左側、レベル+ 1)