C ++で数字の配列として表される数値に1を追加しますか?
配列として表される数値は、数値の各桁を配列の1つの要素に格納します。配列の長さは、配列の桁数と同じです。つまり、4桁の数値の場合は長さ=3です。配列の各要素は1桁の数字です。数値は、最後の要素が数値の最下位桁を格納するように格納されます。そして、最初の要素は数値の最上位桁を格納します。たとえば、
番号-351932は{3,5,1,9,3,2}
として保存されますこの数に1を追加するには、配列の最後の要素に1を追加する必要があり、キャリーを伝搬する必要があるかどうかをチェックします。最後のビットの数値が9の場合、キャリーが伝搬され、最後の要素の値は0になります。
次にビットが伝搬されると、(n-1)位置の要素が1インクリメントされ、キャリー伝搬がチェックされます。例
1つのt0{3,5,7,9}を追加すると、{3,5,8,0}になります。ここでは、キャリーが伝播され、7の値が8に増加します。
例
#include <bits/stdc++.h> using namespace std; void addone(vector<int> &a) { int n = a.size(); a[n-1] += 1; int carry = a[n-1]/10; a[n-1] = a[n-1] % 10; for (int i = n-2; i >= 0; i--) { if (carry == 1) { a[i] += 1; carry = a[i]/10; a[i] = a[i] % 10; } } if (carry == 1) a.insert(a.begin(), 1); } int main() { vector<int> num{2, 3, 9, 9}; cout<<"The original number is : "; for (int i = 0; i < num.size(); i++) cout << num[i]; cout<<endl; addone(num); cout<<"The incremented value is : "; for (int i = 0; i < num.size(); i++) cout << num[i]; return 0; }
出力
The original number is 2399 The incremented value is 2400
-
与えられた数が与えられた番号で表現できるかどうかを確認してください。 C++の任意の基数の桁数
数nと桁数dがあるとします。数値nが2から32までの任意の基数でd桁の数値として表現できるかどうかを確認する必要があります。数値nが8で、d =4であるとすると、これは2進数で1000として表現できます。ここで、dは4です。 。 アイデアは、2から32まですべてのベースを1つずつチェックすることです。ベースをチェックするためにこれらの手順に従うことができます。 数値が基数より小さく、桁が1の場合、trueを返します 桁が1を超え、数値が基数を超える場合は、num / baseを実行して数値から最後の桁を削除し、桁数を減らしてから、これを繰り返し繰り返し実行します。 それ以外の場合はfals
-
C++で整数の1の補数を見つける
このセクションでは、整数の1の完全なものを見つける方法を説明します。補数演算子を使用してこのタスクを非常に高速に実行できますが、32ビットの補数値(4バイト整数)になります。ここでは、nビット数の補数が必要です。 22という数値があるとします。2進数に相当するものは10110です。補完された値は01001で、これは9と同じです。ここで問題が発生します。この値を見つける方法は?最初に、与えられた数のビット数を見つける必要があります。カウントがcであると仮定します(ここでは、22の場合はc =5)。 51を作成する必要があります。したがって、これは11111になります。これを行うには、1を左にc