天天看点

蓝桥杯 算法提高 进制转换

  算法提高 进制转换   时间限制:1.0s   内存限制:256.0MB      问题描述   程序提示用户输入三个字符,每个字符取值范围是0-9,A-F。然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进制,八进制输出。

  输入格式:输入只有一行,即三个字符。

  输出格式:输出只有一行,包括三个整数,中间用空格隔开。

  输入输出样例 样例输入 FFF 样例输出 FFF 4095 7777

16进制转10进制后,利用转来的十进制数直接来转换成八进制, 借助了刚学的数据结构中的stack的知识。 这题要注意当输入为000时的输出格式是:0 0 0

#include<iostream>
#include<string>
#include<stack>
#include<cmath>
using namespace std;
int main()
{
	string s;
	cin >>s;
	int i,len=s.length(),dec=0;
	if(s[0]==s[1]&&s[1]==s[2]&&s[0]=='0'){
		cout <<"0 0 0"<<endl;
		exit(0);
	}
	cout <<s<<" ";
	for(i=len-1;i>=0;i--){                    //16-10
		int t;
		switch(s[i]){
			case'0':t=0;break;
			case'1':t=1;break;
			case'2':t=2;break;
			case'3':t=3;break;
			case'4':t=4;break;
			case'5':t=5;break;
			case'6':t=6;break;
			case'7':t=7;break;
			case'8':t=8;break;
			case'9':t=9;break;
			case'A':t=10;break;
			case'B':t=11;break;
			case'C':t=12;break;
			case'D':t=13;break;
			case'E':t=14;break;
			case'F':t=15;break;
			default:break;
		}
		dec+=pow(16,len-i-1)*t;
	}
	cout <<dec<<" ";
	stack<int> st;                           //10-8
	int t=dec;
	while(t>0){
		st.push(t%8);
		t/=8; 
	}
	while(!st.empty())
	{
		cout <<st.top();
		st.pop();
	}
	
	return 0;
}
           

  算法提高 进制转换   时间限制:1.0s   内存限制:256.0MB      问题描述   程序提示用户输入三个字符,每个字符取值范围是0-9,A-F。然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进制,八进制输出。

  输入格式:输入只有一行,即三个字符。

  输出格式:输出只有一行,包括三个整数,中间用空格隔开。

  输入输出样例 样例输入 FFF 样例输出 FFF 4095 7777

继续阅读