[C++] std::stackを使った10進数を2進数に変換するプログラム

naohiro19
記事: 256
登録日時: 14年前
住所: 愛知県

[C++] std::stackを使った10進数を2進数に変換するプログラム

投稿記事 by naohiro19 » 7年前

Cではchar型の配列を用いて変換したものを逆順に表示すればいいですが、かなり桁数が多いと配列オーバーを起こして今います。
C++ では というヘッダーファイルが用意されるのでpushしたあとにtopで2進数を表示し、popで削除を行えばできます。

以下が書いたプログラムになります。

CODE:

#include 
#include 

using namespace std;

int main()
{
	
	stack st;

	int n;

	cout ";
	cin >> n;

	int temp = n;

	while (n != 0) {
		st.push(n % 2);
		n /= 2;
	}

	cout 100
100を2進数に変換すると1100100になります。

tempは用意したのかというと入力された値を保持して表示するときに使うので用意しました。

アバター
みけCAT
記事: 6734
登録日時: 14年前

Re: [C++] std::stackを使った10進数を2進数に変換するプログラム

投稿記事 by みけCAT » 7年前

「任意の整数を入力してください」って言うからには、負の整数やINT_MAXを超える大きい整数にも対応しないとダメですよね。
現状では、こうなってしまいます。

入力例1

CODE:

-10
出力例1

CODE:

任意の整数を入力してください >-10を2進数に変換すると-10-10になります。
入力例2

CODE:

12345678901234567890
出力例2

CODE:

任意の整数を入力してください >2147483647を2進数に変換すると1111111111111111111111111111111になります。

アバター
usao
記事: 1889
登録日時: 12年前

RE: [C++] std::stackを使った10進数を2進数に変換するプログラム

投稿記事 by usao » 7年前

bitsetでやれたような気がしたけど,表示がちょっと面倒だな.

CODE:

int main()
{
	unsigned long Value = 0x1E7Au;
	std::bitset BS( Value );
	auto BinStr = BS.to_string();

	//そのまま表示すると先頭側に0がいっぱい付くなぁ
	std::cout << BinStr << std::endl;

	//先頭側の要らない0を除いて表示するには,こんなんでいいか?
	if( BS.none() )
	{
		std::cout << 0 << std::endl;
	}
	else
	{
		auto ShowBegin = BinStr.find_first_of( '1' );
		std::cout << BinStr.substr(ShowBegin) << std::endl;
	}

	//
	std::cin.ignore();
	return 0;
}