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

n ^ xの数字の再帰的な合計。ここで、nとxはC++では非常に大きいです。


「num」および「x」として正の整数変数が与えられます。タスクは、num ^ xを再帰的に計算し、1桁が達成されなくなり、結果の1桁が出力されるまで、結果の数値の桁を加算することです。

このためのさまざまな入出力シナリオを見てみましょう-

入力 − int num =2345、int x =3

出力 − n ^ xの桁の再帰的な合計。ここで、nとxは非常に大きいです:8

説明 − numおよびxとして正の整数値が与えられ、値は2345、累乗は3です。最初に、2345 ^ 3、つまり12,895,213,625を計算します。ここで、これらの数字を追加します。つまり、1 + 2 + 8 + 9 + 5 + 2 + 1 + 3 + 6 + 2 + 5、つまり44です。次に、4 + 4、つまり8を追加します。 、出力は8です。

入力 − int num =3、int x =3

出力 − n ^ xの桁の再帰的な合計。ここで、nとxは非常に大きいです:9

説明 − numおよびxとして正の整数値が与えられ、値は3、累乗は3です。最初に3 ^ 3、つまり9を計算します。したがって、1桁を達成したため、出力は9であり、それ以上の計算は必要ありません。

以下のプログラムで使用されているアプローチは次のとおりです

  • 整数変数をnumおよびxとして入力し、さらに処理するためにデータを関数Recursive_Digit(num、x)に渡します。

  • 関数Recursive_Digit(num、x)

    の内部
    • 変数「total」をlongとして宣言し、引数として渡された数値の桁の合計を返す関数total_digits(num)を呼び出すように設定します。

    • 変数をlong型のtempとして宣言し、power%6で設定します

    • IF total =3 OR total =6 AND power> 1を確認してから、9を返します。

    • それ以外の場合、電力=1の場合、合計を返します。

    • ELSE IF、power =0の場合、1を返します。

    • ELSE IF、temp-0次に、total_digits((long)pow(total、6))

      への呼び出しを返します。
    • ELSE、return total_digits((long)pow(total、temp))。

  • 関数内longtotal_digits(long num)

    • IF num =0をチェックしてから0を返します。IF、num%9 =0をチェックしてから、9を返します。

    • それ以外の場合は、num%9を返します

#include <bits/stdc++.h>
using namespace std;
long total_digits(long num){
   if(num == 0){
      return 0;
   }
   if(num % 9 == 0){
      return 9;
   }
   else{
      return num % 9;
   }
}
long Recursive_Digit(long num, long power){
   long total = total_digits(num);
   long temp = power % 6;
   if((total == 3 || total == 6) & power > 1){
      return 9;
   }
   else if (power == 1){
      return total;
   }
   else if (power == 0){
      return 1;
   }
   else if (temp == 0){
      return total_digits((long)pow(total, 6));
   }
   else{
      return total_digits((long)pow(total, temp));
   }
}
int main(){
   int num = 2345;
   int x = 98754;
   cout<<"Recursive sum of digit in n^x, where n and x are very large are: "<<Recursive_Digit(num, x);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます

Recursive sum of digit in n^x, where n and x are very large are: 1

  1. 合計とGCDがC++で与えられている2つの数値を見つけます

    2つの数aとbの合計とgcdがあります。数字aとbの両方を見つける必要があります。それが不可能な場合は、-1を返します。合計が6でgcdが2であるとすると、数値は4と2になります。 このアプローチは、GCDが与えられると、その数がその倍数になることが知られているようなものです。次の手順があります 最初の数値をGCDとして選択すると、2番目の数値はsum − GCDになります。 前の手順で選択した数値の合計が合計と同じである場合は、両方の数値を出力します。 それ以外の場合は、数値が存在しないため、-1を出力します。 例 #include <iostream>

  2. C ++でのコピーの省略と戻り値の最適化とは何ですか?

    コピーの省略は、コピーの省略とも呼ばれます。これは、コンパイラの最適化手法の1つです。オブジェクトの不要なコピーを回避します。現在のほとんどのコンパイラは、このCopyElision手法を使用しています。 1つのサンプルコードを使用して、どのように機能するかを見てみましょう。 サンプルコード #include <iostream> using namespace std; class MyClass { public: MyClass(const char* str = "\0") { //default constructor cou