ヘクス変換を達成するためにスタック

アイデア解析

私たちは、すべてのバイナリと小数の間の任意の変換に精通している、バイナリの思考は、小数点ブリッジへの変換は、十進数、十進数に最初に電源を入れた後、目的のバンドに変わるということです。
例えば、任意のバイナリ小数を回し:45(8)、小数点以下、4×8 =結果に1 + 5x8 0 = = 32 5 + 37 [;我々は、周期的な負荷によって達成することができます。
示されるように、短い分割を使用する必要性、オクタルに変わり、例えば55のように、任意の帯域を有効に小数
ここに画像を挿入説明低オン逆に最初の添加の残りの関係のこの高度なアウトとスタックは非常に類似した後、我々は達成するためにスタックを使用することができ、。

メインコード

int HexAnyToTen(char * num,int hex_begin){
	int i = 0,j = 0,k = 1;
	int counter = 0;
	int prior = 0;
	int length = strlen(num);
	printf("%d",length);
	for(i=0;i < length; i++)
	{
		k = 1;
		for(j=0;j<length-1-i;j++)
		{
			k *= hex_begin;
		}
		if(num[i] >= 48&&num[i] <= 57)
		{
			counter += (num[i] - '0')*k;
			prior = num[i] - '0';
		}
		else if(num[i] >= 65&&num[i] <= 90){
			counter += (num[i] - 55)*k;
			prior = num[i] - 55;
		}
		else if(num[i] >= 97&&num[i] <= 122){
			counter += (num[i] - 87)*k;
			prior = num[i] - 87;
		}
		else{
			if(i==0){
				continue;
			}
			else{
				counter = counter - prior*k*(hex_begin -1);
			}
		}
	}
	printf("%d\n",counter);
	return counter;
}

// 十进制转任意进制
void    HexToTenToAny(int num_hex_ten,int hex_after)
{
	SeqStack * s;
	int x;
	s = initSeqStack();
	while( num_hex_ten )
	{
		push(s, num_hex_ten % hex_after);
		num_hex_ten /= hex_after;
	}

	printf("转换成目的进制后:");

	while(!isEmpty(s))
	{
		x = getTop(s);
		pop(s);
		if(x > 9){
			printf("%c",x+87);
		}
		else{
			printf("%d",x);
		}
	}

	printf("\n");
}

サンプル入力

87475    // 待转换的数字
16			//待转换数字的进制
8				//目的进制

サンプル出力

转换成目的进制后:554101

すべてのコード

一カ月間の小さな水のGithub

また、どこの質問は歓迎依頼するかわからない、いくつかの珍しいロジック処理を必要とします。

84元記事公開 ウォンの賞賛250 ビュー150,000 +を

おすすめ

転載: blog.csdn.net/ygdxt/article/details/88601861