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

配列として表される数に1を追加します(再帰的アプローチ)?


このセクションでは、1つの興味深い問題があります。 1つの番号が与えられていると仮定します。この数を1増やす必要があります。これは非常に簡単な作業です。ただし、ここでは数値を配列として配置します。その番号の各桁は、配列の要素として配置されます。番号が512の場合、{5、1、2}として保存されます。また、再帰的アプローチを使用して数を増やす必要があります。明確なアイデアを得るためのアルゴリズムを見てみましょう。

アルゴリズム

増分(arr、n、インデックス)

最初のインデックスのデフォルト値は0です

begin
   if index < n, then
      if arr[index] < 9, then
         arr[index] := arr[index] + 1
      else
         arr[index] := 0
         increment(arr, n, index + 1)
   end if
   if index = n, then
      arr[n] := 1
      n := n + 1
   end if
end

#include <iostream>
#include <cmath>
#define MAX 20
using namespace std;
void increment(int num_arr[], int &n, int index = 0){
   if(index < n){
      if(num_arr[index] < 9){ //if digit is less than 9, add 1
         num_arr[index]++;
      }else{ //otherwise increase number recursively
         num_arr[index] = 0;
         increment(num_arr, n, index+1);
      }
   }
   if(index == n){
      num_arr[n] = 1; //add extra carry
      n++; //increase n
   }
}
void dispNumber(int num_arr[], int n){
   for(int i = n-1; i>= 0; i--){
      cout << num_arr[i];
   }
   cout << endl;
}
int numToArr(int num_arr[], int number){
   int i = 0;
   int n = log10(number) + 1;
   for(int i = i; i< n; i++){
      num_arr[i] = number % 10;
      number /= 10;
   }
   return n;
}
main() {
   int number = 1782698599;
   int num_arr[MAX];
   int n = numToArr(num_arr, number);
   cout << "Initial Number: "; dispNumber(num_arr, n);
   increment(num_arr, n);
   cout << "Final Number: "; dispNumber(num_arr, n);
}

出力

Initial Number: 1782698599
Final Number: 1782698600

  1. C#のHashSetの要素数?

    C#でHashSetの要素数を取得するには、コードは次のとおりです- 例 using System; using System.Collections.Generic; public class Demo {    public static void Main() {       HashSet<int> set1 = new HashSet<int>();       set1.Add(25);       set1.Add(50);   &nbs

  2. 配列のバイト数をカウントするC#プログラム

    バイト配列を設定する- byte[] b = { 5, 9, 19, 23, 29, 35, 55, 78 }; バイト数をカウントするには- Buffer.ByteLength(b) 以下はコードです- 例 using System; class Program {    static void Main() {       byte[] b = { 5, 9, 19, 23, 29, 35, 55, 78 };       int len = Buffer.ByteLength(b);   &nb