蓝桥杯 基础练习 十六进制转八进制
2018-03-03 21:34
204 查看
基础练习 十六进制转八进制 时间限制:1.0s 内存限制:512.0MB 问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
[b]【提示[/b]】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
[b]【提示[/b]】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
#include<iostream> #include<cstring> using namespace std; int main() { int n,d,h;//h标记 cin>>n; while(n--) { string str,s; cin>>str; int h=0; for(int i=0;i<str.length();i++) { if(str[i]=='0') s+="0000"; else if(str[i]=='1') s+="0001"; else if(str[i]=='2') s+="0010"; else if(str[i]=='3') s+="0011"; else if(str[i]=='4') s+="0100"; else if(str[i]=='5') s+="0101"; else if(str[i]=='6') s+="0110"; else if(str[i]=='7') s+="0111"; else if(str[i]=='8') s+="1000"; else if(str[i]=='9') s+="1001"; else if(str[i]=='A') s+="1010"; else if(str[i]=='B') s+="1011"; else if(str[i]=='C') s+="1100"; else if(str[i]=='D') s+="1101"; else if(str[i]=='E') s+="1110"; else if(str[i]=='F') s+="1111"; }//得到二进制数 //方便得到的二进制数分为每组三个数字,进而转化为八进制,三位并一位 if(s.length()%3==1)//余数为1加2颗0 "00" { s="00"+s;//"+"是连接符号,不能写成s+"00",有顺序 } else if(s.length()%3==2) { s="0"+s; } for(int i=0;i<s.length();i+=3) { d=0;//三位并一位,一位每次循环清零 d=4*(s[i]-'0')+2*(s[i+1]-'0')+(s[i+2]-'0'); if(d)//控制不输出前导 { h=1;//如果不为0,标记h=1,输出 } if(h) cout<<d;//每一位每一位处理 输出 } cout<<endl; } return 0; }java(运行超时 代码在编译器通过,但提交超时 )
import java.util.*; import java.math.*; public class Main { public static void main(String[] args) { int d;//h标记 Scanner input=new Scanner(System.in); int n=input.nextInt(); while(n--!=0) { String s="";//字符串初始化 String str1=input.next(); char []str=str1.toCharArray(); int h=0; for(int i=0;i<str1.length();i++) { if(str[i]=='0') s+="0000"; else if(str[i]=='1') s+="0001"; else if(str[i]=='2') s+="0010"; else if(str[i]=='3') s+="0011"; else if(str[i]=='4') s+="0100"; else if(str[i]=='5') s+="0101"; else if(str[i]=='6') s+="0110"; else if(str[i]=='7') s+="0111"; else if(str[i]=='8') s+="1000"; else if(str[i]=='9') s+="1001"; else if(str[i]=='A') s+="1010"; else if(str[i]=='B') s+="1011"; else if(str[i]=='C') s+="1100"; else if(str[i]=='D') s+="1101"; else if(str[i]=='E') s+="1110"; else if(str[i]=='F') s+="1111"; }//得到二进制数 //方便得到的二进制数分为每组三个数字,进而转化为八进制,三位并一位 if(s.length()%3==1)//余数为1加2颗0 "00" { s="00"+s;//"+"是连接符号,不能写成s+"00",有顺序 } else if(s.length()%3==2) { s="0"+s; } char []s1=s.toCharArray();//把字符串s转化为字符数组存在s1[]数组 for(int i=0;i<s.length();i+=3) { d=0;//三位并一位,一位每次循环清零 d=(int)(4*(s1[i]-'0')+2*(s1[i+1]-'0')+(s1[i+2]-'0')); //c++与java区别 java需要强制类型转化 if(d!=0)//控制不输出前导 { 4000 h=1;//如果不为0,标记h=1,输出 } if(h==1) System.out.print(d); } System.out.println(); } } }
相关文章推荐
- 【蓝桥杯】基础练习 十六进制转八进制
- 蓝桥杯--基础练习:十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制 【字符串处理】
- 蓝桥杯基础练习十六进制转八进制
- 蓝桥杯-基础练习 十六进制转八进制
- 蓝桥杯基础练习 十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- (蓝桥杯)基础练习 十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- 蓝桥杯-基础练习-十六进制转八进制(被超时了!!!)
- 蓝桥杯 基础练习 十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- 蓝桥杯基础练习 十六进制转八进制
- 蓝桥杯练习-基础练习-十六进制转八进制
- 蓝桥杯——基础练习 十六进制转八进制
- 蓝桥杯 【基础练习】 十六进制转八进制
- 蓝桥杯-- 基础练习 十六进制转八进制(大数操作)
- 蓝桥杯 基础练习 十六进制转八进制