整数を配列に変換して、次のようにします。
int number = 123456 ;
int array[7] ;
結果:
array[0] = 1
array[1] = 2
...
array[6] = 6
おそらく、より良い解決策は、逆方向に作業することです。
123456 % 10 = 6
123456 / 10 = 12345
12345 % 10 = 5
12345 / 10 = 1234
モジュラー演算を使用するだけです:
int array[6];
int number = 123456;
for (int i = 5; i >= 0; i--) {
array[i] = number % 10;
number /= 10;
}
ここで私が思いついたのは、integerToArray関数が整数値から変換されたベクトルを返すことです。あなたはメイン関数でそれをテストすることもできます:
#include <iostream>
#include <vector>
using namespace std;
vector <int> integerToArray(int x)
{
vector <int> resultArray;
while (true)
{
resultArray.insert(resultArray.begin(), x%10);
x /= 10;
if(x == 0)
return resultArray;
}
}
int main()
{
vector <int> temp = integerToArray(1234567);
for (auto const &element : temp)
cout << element << " " ;
return 0;
}
//outputs 1 2 3 4 5 6 7
このようにして、数値の最後の桁を抽出できます。
int digit = number % 10;
number /= 10;
number
が正かどうかも確認する必要があることに注意してください。他の値には追加の処理が必要です。
数値のlog10を取り、桁数を取得します。それをpos
と入力し、次にループで10のモジュロ(n % 10
)を取り、結果を配列pos
に配置します。 pos
を減らし、数値を10で割ります。pos == 0
まで繰り返します
それが否定的であるなら、あなたはサインで何をしたかったですか?
それを文字列に変換したい場合は、とても簡単です。%演算子の使用について他の人が言っていることを実行してください:
Num = 123としましょう。これを行うことができます:
string str;
while (num > 0)
{
str = (num % 10) + str; //put last digit and put it into the beginning of the string
num = num /10; //strip out the last digit
}
これで、strを文字の配列として使用できます。配列の先頭に物を置くと、他のすべてのものをシフトする必要があるため、これを配列で行うのは面倒です。できることは、各桁を文字列に入れる代わりに、スタックに入れることです。次のように逆順に配置します。3 2 1.次に、上位の数値を1つずつポップして、正しい順序で配列に配置します。配列は次のようになります。1 2 3.これは宿題なので実装はあなたにお任せします。
@Broamには良い解決策がありますが、彼が述べたように、逆方向に作業するためのものです。 OPやこのスレッドを調べている人はそれを転送したいと思うので、これを投稿します。より良い解決策がある場合は、返信してください。私も興味があります。
#include <cmath>
#include <vector>
std::vector<int> vec;
for (int i = log10(input); i >= 0; i--)
{
vec.Push_back(input / int(std::pow(10, i)) % 10);
}
良いアプローチかもしれません
C/C++バージョン(およびその他の言語)については、SO質問 言語対決:数字の文字列を整数の配列に変換? を参照してください。
私が今想像できる最も簡単な方法は:
char array[40];
int number = 123456;
memset(array, 0x00, sizeof(array));
sprintf(array, "%d", number);
さらに、各桁を整数に変換して、char値を0x30だけ減算することもできます。
[〜#〜] edit [〜#〜]:これが宿題の場合、教師はおそらく%演算子を使用してプログラムを作成するように依頼します(例12%10 = 2)。これが事実なら、良い宿題;-)
モジュラスを使用して、最後の桁を決定できます。
また、除算を使用して、別の桁を最後の桁に移動できます。
これが本当に宿題の場合は、先生に見せてください。
注意!パフォーマンスが非常に低く、期待した効果に到達するための不器用な方法であり、一般的に自宅ではこれを行わない(仕事);-)
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
typedef std::vector< int > ints_t;
struct digit2int
{
int operator()( const char chr ) const
{
const int result = chr - '0';
return result;
}
};
void foo( const int number, ints_t* result )
{
std::ostringstream os;
os << number;
const std::string& numberStr = os.str();
std::transform(
numberStr.begin(),
numberStr.end(),
std::back_inserter( *result ),
digit2int() );
}
int main()
{
ints_t array;
foo( 123456, &array );
std::copy(
array.begin(),
array.end(),
std::ostream_iterator< int >( std::cout, "\n" ) );
}
単純に「変換」することはできません。整数はソフトウェアでは10進表記では表されません。したがって、必要な個々の数字しないでくださいが存在します。計算する必要があります。
では、任意の数が与えられた場合、1の数をどのように決定できますか?
10で除算してから、残りを取ります。123の場合、除算は12を与え、残りは3になります。したがって、1が3になります。 12は私たちが過去のものを教えてくれるので、それは次の反復のための入力になります。それを取り、10で除算して1を取得し、残りは2になります。したがって、10の位に2があり、1は数百の場所に残っています。これを10で割ると、ゼロと残りの1が得られます。したがって、100の位に1、10の位に2、1の位に3が得られます。そして、最後の除算がゼロを返したので、これで完了です。