文章标题 基础练习 十六进制转八进制
来源:互联网 发布:python try 重试 编辑:程序博客网 时间:2024/06/05 03:48
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
下面附上我的代码:
package a;
import java.util.Scanner;
public class problem10 {
public static void main(String[] args) { // TODO Auto-generated method stub Scanner cin=new Scanner(System.in); int n=cin.nextInt(); String a[]=new String[n]; int b[]=new int[n]; for(int i=0;i<n;i++) { a[i]=cin.next(); int s = 0,aa=0,k=0; int wei[]=new int[30]; for(int j=0;j<a[i].length();j++) { char c=a[i].charAt(j); if(c>='A'&&c<='F') aa=c-'A'+10; else aa=c-'0'+0; s+=aa*Math.pow(16, a[i].length()-1-j); } while(s!=0) { wei[k++]=s%2; s=s/2; } int a1=k/3; int b1=k%3; for(int i1=0;i1<a1;i1++) {int c1=(int) (wei[k-1-i1*3]*Math.pow(2, 2)+wei[k-2-i1*3]*Math.pow(2, 1)+wei[k-3-i1*3]*Math.pow(2,0)); b[i]+=c1*Math.pow(10, a1-1-i1); } for(int i2=k-1-a1*3;i2>=0;i2--)b[i]+=wei[k-a1*3-1]*Math.pow(2,b1-1-i2); } for(int kk=0;kk<n;kk++)System.out.println(b[kk]);}
}
运行结果如下图所示:
给的提示是先将16进制转化为2进制,再转化为八进制,但是我试了一下感觉这两个过程处理起来以及存储结构都比较麻烦,网上别人的也有帖。我这里采用的思想是先转化为10进制,比如16进制的39,转化为10进制为3*16+9=57;57再转化为2进制,这里是111001,每三个分一组,表示为八进制就为71,这里a1表示每三位二进制的个数,b1表示总位数减去a1*3剩余的位数(一般取1或2),注意运算的时候wei[i](存放二进制每一位的数组)要逆序计算,这里仅将解题思路进行参考,方便以后引用。
阅读全文
1 0
- 文章标题 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- Hadoop之网站日志分析项目案例(一)介绍(笔记21)
- WPF ItemSource绑定的问题
- MySQL获取表中各字段的注释
- centos7 下php+mysql+php7编译安装
- html无序列表横向水平居中的解决方法
- 文章标题 基础练习 十六进制转八进制
- 欢迎使用CSDN-markdown编辑器
- Ceres优化
- poj2446 Chessboard【最大匹配】
- SFTP-上传下载工具类
- Problem Description
- Spring:IoC 用法(六、自动扫描Bean用法)
- Android零基础入门第8节:HelloWorld,我的第一趟旅程出发点
- 使用不同语言计算时间差