您的位置:首页 > Web前端

基础练习 十六进制转八进制(StringBuffer类)

2018-01-30 20:16 127 查看
问题描述

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

输入格式

 输入的第一行为一个正整数n (1<=n<=10)。

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

输出格式

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

【注意】

输入的十六进制数不会有前导0,比如012A。   

输出的八进制数也不能有前导0。

样例输入

2  

39   

123ABC

样例输出

71   

4435274

【提示】

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

思路:

1. 将16进制数转化为二进制

其中的StringBuilder类,使用该类可以创建字符串变量,即字符串的大小和内容均可以修改,可以实现在字符串中加入字串或者替换字串的操作。

2. 将二进制数转化为八进制

基础知识:

1. 创建StringBuffer类的对象的构造方法有三种:

public StringBuffer() 该方法用来创建空串缓冲区,扩充之后才可以使用。

public StringBuffer(int length) 该方法用来创建一个长度为length的空串缓冲区。

public StringBuffer(String str) 该方法用来创建 一个内容为str的缓冲区。

2.获取或修改串长度的方法。

public int length() 该方法用来获取缓冲区字符的个数。

public void setlength(int newlength) 用来重新设置缓冲区的长度。

3.字符串变量中获取字符和修改字符的方法

public char charAt(int index) 用来获取字符串变量中指定位置index处的字符。

public void setCharAt(int index,char ch) 该方法用于将串缓冲区中指定位置index处的字符修改为ch。

4.字符串变量中附加和插入各种类型数据的方法。

public StringBuffer insert(int <输入位置>,<参数类型> <参数名>)

public StringBuffer append(<参数类型> (参数名))

该方法用来将指定参数转化为字符串,并附加在当前字符串之后,生成一个新的字符串变量。例如,

StringBuffer sb=new StringBuffer();
sb.append("abcd");
sb.insert(2,123);
System.out.println(sb.toString());


执行上述程序段后输出结果如下:

ab123cd

StringBuffer sb=new StringBuffer();
sb.append("good");
sb.append(' ');
sb.append("bye!");
System.out.println(sb.toString());


上述程序的结果为: good bye!

5.String类和StringBuffer类的相法:

StrngBuffer sb=new StringBuffer(String s)

该方法是StringBufffer类的一种构造方法,可以直接用一个字符串常量s创建一个字符串变量sb。

String s=sb.toString();

该方法用来将字符串变量sb转换为字符串常量s。

6.字符串的符串的加加法和赋值运算。

字符串加法运算:是将两个字符串连接成一个新的字符串;也可以将一个字符串与某种其他类型的数据连成一个字符串,这是要使用对象的toString()方法。

String s="mn"+"pg”+Integer.toString(123);


实际上,该语句可以理解为:

int i=123;

String s=new StringBuffer().append("mn").append("pg").append(i).toString();


字符串的赋值运算可将两个字符串连接后赋值给一个字符串。例如这里
String s="abc";

s+="def";


上述赋值运为:

String s=new StringBuffer().append("abc").toString();

s=new StringBuffer().append(s).append("def").toString();


代码如下:

package BASIC_12;
import java.util.Scanner;
public class Main {
public static String toBinary(String str){
int length=str.length();
StringBuffer str2=new StringBuffer();
for(int i=0;i<length;i++){
switch(str.charAt(i))
{
case '0':str2.append("0000");break;
case '1':str2.append("0001");break;
case '2':str2.append("0010");break;
case '3':str2.append("0011");break;
case '4':str2.append("0100");break;
case '5':str2.append("0101");break;
case '6':str2.append("0110");break;
case '7':str2.append("0111");break;
case '8':str2.append("1000");break;
case '9':str2.append("1001");break;
case 'A':str2.append("1010");break;
case 'B':str2.append("1011");break;
case 'C':str2.append("1100");break;
case 'D':str2.append("1101");break;
case 'E':str2.append("1110");break;
case 'F':str2.append("1111");break;
}
}
return str2.toString();
}

public static void toOctal(String str){
int length=str.length();
int a;
a=(str.charAt(0)-'0')*4+(str.charAt(1)-'0')*2+(str.charAt(2)-'0')*1;
if(a!=0)
System.out.print(a);
for(int i=3;i<length;i+=3){
a=(str.charAt(i)-'0')*4+(str.charAt(i+1)-'0')*2+(str.charAt(i+2)-'0')*1;
System.out.print(a);
}
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
String a[]=new String[n+1];
for(int i=0;i<n;i++){
a[i]=cin.next();
}
for(int i=0;i<n;i++){
String str1=toBinary(a[i]);
int length=str1.length();
if(length%3==1) str1="00"+str1;
else if(length%3==2) str1="0"+str1;
toOctal(str1);
System.out.println();
}
}}


}

“`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: