蓝桥试题集-基础练习-BASIC-10~13-十进制转十六进制-十六进制转十进制-十六进制转八进制-数列排序

BASIC-10 十进制转十六进制

资源限制

时间限制:1.0s 内存限制:512.0MB

问题描述

十六进制数是在程序设计时经常要使用到的一种整数的表示方式。
它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
给出一个非负整数,将它表示成十六进制的形式。

输入格式

输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647

输出格式

输出这个整数的16进制表示

样例输入

30

样例输出

1E

#include<iostream>
#include<cstring>
using namespace std;
int  main(){
	int n,i=0,t;
	cin>>n;
	char s[10];
	if(n==0)
		cout<<0;
	else{
		while(n){
			t=n%16;
			if(t>=10)
				s[i++]=t%10+'A';
			else
				s[i++]=t+'0';
			n=n/16;
		}
		s[i]='\0';
		char ch;
		int len=strlen(s);
		for(i=0;i<len/2;i++){
			ch=s[i];
			s[i]=s[len-i-1];
			s[len-i-1]=ch;
		}
		cout<<s;
	}
	return 0;
}

BASIC-11 十六进制转十进制

资源限制

时间限制:1.0s 内存限制:512.0MB

问题描述

从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

样例输入

FFFF

样例输出

65535

#include<iostream>
#include<cstring>
using namespace std;
int  main(){
	char s[10];
	long long sum=0;	//注意数据类型的大小
	cin>>s;
	int len=strlen(s);
	for(int i=0;i<len;i++){
		if(s[i]>='0'&&s[i]<='9'){
			sum=sum*16+(s[i]-'0');
		}
		if(s[i]>='A'&&s[i]<='F')
			sum=sum*16+(s[i]-'A'+10);
	}
	cout<<sum;
	return 0;
}

BASIC-12 十六进制转八进制

资源限制

时间限制:1.0s 内存限制:512.0MB

问题描述

给定n个十六进制正整数,输出它们对应的八进制数。

输入格式

输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0 ~ 9、大写字母A ~ F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式

输出n行,每行为输入对应的八进制正整数。

【注意】   
输入的十六进制数不会有前导0,比如012A。   
输出的八进制数也不能有前导0。

样例输入

2   
39   
123ABC

样例输出

71   
4435274

【提示】   
先将十六进制数转换成某进制数,再由某进制数转换成八进制。

#include <iostream>
#include <string>
using namespace std;
int main(){
    int n;
    cin>>n;
    string s1[12],s2[12];
    for(int i = 0;i<n;i++)
        cin>>s1[i];
    for(int i = 0;i<n;i++){
        s2[i]="";
        for(int j = 0;j<s1[i].length();j++){
            switch (s1[i][j]) {
                case '0' : s2[i] += "0000"; break;
                case '1' : s2[i] += "0001"; break;
                case '2' : s2[i] += "0010"; break;
                case '3' : s2[i] += "0011"; break;
                case '4' : s2[i] += "0100"; break;
                case '5' : s2[i] += "0101"; break;
                case '6' : s2[i] += "0110"; break;
                case '7' : s2[i] += "0111"; break;
                case '8' : s2[i] += "1000"; break;
                case '9' : s2[i] += "1001"; break;
                case 'A' : s2[i] += "1010"; break;
                case 'B' : s2[i] += "1011"; break;
                case 'C' : s2[i] += "1100"; break;
                case 'D' : s2[i] += "1101"; break;
                case 'E' : s2[i] += "1110"; break;
                case 'F' : s2[i] += "1111"; break;
                default:
                    break;
            }
        }
        if(s2[i].length()%3==1)
			s2[i] = "00" + s2[i];
        else if(s2[i].length()%3==2)
			s2[i] = "0" + s2[i];
        int flag = 0;
        for(int j = 0;j<=s2[i].length()-3;j+=3){
            int num = 4*(s2[i][j]-'0')+2*(s2[i][j+1]-'0')+(s2[i][j+2]-'0');
            if(num)
				flag = 1;
            if(flag)
				cout<<num;
        }
        cout<<endl;
    }
    return 0;
}

BASIC-13 数列排序

资源限制

时间限制:1.0s 内存限制:512.0MB

问题描述

给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200

输入格式

第一行为一个整数n。   
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。

输出格式

输出一行,按从小到大的顺序输出排序后的数列。

样例输入

5
8 3 6 4 9

样例输出

3 4 6 8 9

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
	int n,m[201];
	cin>>n;
	for(int i=0;i<n;i++)
		cin>>m[i];
	sort(m,m+n);
	for(int i=0;i<n;i++)
		cout<<m[i]<<" ";
	return 0;
}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页