Java实现任意进制转换

这篇文章主要为大家详细介绍了Java实现任意进制转换的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Java实现任意进制转换,久久派带你了解更多相关信息。

本文实例为大家分享了Java实现任意进制转换的具体代码,供大家参考,具体内容如下

问题描述

编写程序实现任意进制间的相互转换

(一)、进制转换思想

1、先把任意进制转化为十进制
2、再把十进制转化为任意进制
3、本算法结合了十以下进制利用公式转换以及十以上进制调用函数转换

(二)、问题分析

1.输入当前数进制

输入当前进制 m ,且保证 m>1

public static void main (String[] args){        int l,m,n;        String l16;        Scanner sc = new Scanner(System.in);        System.out.println(\"请问当前数为几进制(m>1)\");        m = sc.nextInt();

2.输入当前数

(1)m进制数要保证每个数字小于 m

System.out.println(\"请输入当前数,每个数字均要小于\"+m);        int temp=0,i=0;

(2)对于十以下进制,输入的是数值型,采用 l=sc.nextInt();
(3)利用公式计算转化为十进制,可调用 Math 的 pow(m,i) 函数,用以计算 m 的 i 次幂;数值的每个数字从右到左依次与 m^i (i=0,1,2……)相乘,可利用除10求余(%)运算;每计算一次,原数据缩小十倍且只保留整数部分(除运算 :/ ),直到数值为0结束

if(m<=10){      l=sc.nextInt();      while(l!=0){         temp+=(l%10)*Math.pow(m,i);         i+=1;         l=l/10;}} 

(4)对于大于十的进制,输入的是字符串型,采用 l16=sc.next();
(5)可以直接调用 把任意进制转化为十进制 的包Integer.valueOf()

 else{     l16=sc.next();      temp=Integer.valueOf(l16,m);}

(6)所以实际上这里面其实只用 temp=Integer.valueOf(l16,m); 就可以解决整个问题,因为十以下进制的数也能看成字符串型,这里为了介绍两种方法

4.输入待转化进制

这里仍然介绍两种方法,十以下进制、十以上进制分开处理

System.out.println(\"请问要转换为几进制(n>1)\");n = sc.nextInt();

(1)十以下进制采用公式,并把该处理方法封装在一个类(ConversionN)里
(2)temp 为上一段转化后的十进制数,n 为待转进制
(3)十进制 temp 转化为 n 进制的思想是:当前数除 n 取余(% 运算),得到的数字放在右边第一位(相当于该数字乘1);把该数缩小十倍保留整数部分,继续除 n 取余,得到的数字放在右边第二位(相当于该数字乘10);依次循环,把最终得到的数加在一起,就是转化的 n 进制数

public static int ConversionN(int temp,int n){        int l=0,j=1;        while(n<=10 && temp!=0){            l+=(temp%n)*j;            temp=temp/n;            j=j*10;        }        return l;    }

(4)十以上进制直接调用 把十进制转换成任意进制 的包 Integer.toString()

String L16=Integer.toString(temp,n);System.out.println(\"该数由\"+m+\"进制转化为\"+n+\"进制的结果为:\"+L16);

5.输出转化后数值

(1)由于选择转化的进制不同(十以下,十以上),所以输出的路径也不同
(2)采用三目运算符根据范围选择路径:十进制以下路径1,十进制以上路径2,n <=1 路径3(提示输入有误)
(3)结合 Switch 语句,完成选择语句

int a = n<=10 & n>1 ? 1: n>10 ? 2:3;        switch (a){            case 1 :                BaseConversion base = new BaseConversion();                System.out.println(\"该数由\"+m+\"进制转化为\"+n+\"进制的结果为:\"+base.ConversionN(temp,n));                break;            case 2 :                String L16=Integer.toString(temp,n);                System.out.println(\"该数由\"+m+\"进制转化为\"+n+\"进制的结果为:\"+L16);                break;            case 3:                System.out.println(\"输入有误\");                break;        }    }

(三)、完整代码

把上述代码整理

import java.util.*;public class BaseConversion {    public static void main (String[] args){        int l,m,n;        String l16;        Scanner sc = new Scanner(System.in);        System.out.println(\"请问当前数为几进制(m>1)\");        m = sc.nextInt();        System.out.println(\"请问要转换为几进制(n>1)\");        n = sc.nextInt();        System.out.println(\"请输入当前数,每个数字均要小于\"+m);        int temp=0,i=0;        if(m<=10){            l=sc.nextInt();            while(l!=0){                temp+=(l%10)*Math.pow(m,i);                i+=1;                l=l/10;            }        }        else{            l16=sc.next();            temp=Integer.valueOf(l16,m);        }        int a = n<=10 & n>1 ? 1: n>10 ? 2:3;        switch (a){            case 1 :                BaseConversion base = new BaseConversion();                System.out.println(\"该数由\"+m+\"进制转化为\"+n+\"进制的结果为:\"+base.ConversionN(temp,n));                break;            case 2 :                String L16=Integer.toString(temp,n);                System.out.println(\"该数由\"+m+\"进制转化为\"+n+\"进制的结果为:\"+L16);                break;            case 3:                System.out.println(\"输入有误\");                break;        }    }    public static int ConversionN(int temp,int n){        int l=0,j=1;        while(n<=10 && temp!=0){            l+=(temp%n)*j;            temp=temp/n;            j=j*10;        }        return l;    }}

(四)运行结果

Java实现任意进制转换

Java实现任意进制转换

Java实现任意进制转换

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持趣讯吧。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/17366.html

(0)
nan
上一篇 2021-08-26
下一篇 2021-08-26

相关推荐

  • 处暑节气前后的民俗?处暑的传统活动是什么

    要说处暑前后会不会很热,其实大家要知道在处暑前后其实南方还会有秋老虎,因此处暑还是会要热一段时间,那么这个时候处暑节气前后的民俗以及处暑的传统活动是什么,接下来大家就随趣讯吧小编一起了解看看~

    2021-08-02
    0
  • 人均奖励400万!俞敏洪重金留人 !

    4月14日消息,本周东方甄选发公告,向公司包括高管、雇员在内的154人发放3045.9万股股份奖励,按照东方甄选当天收盘价29港元计算,本次股份奖励总价值约8.83亿港元。其中俞敏洪获得150万股,CFO尹强获得60万股,按照4月11日收盘价计算,价值分别约4350万港元、1740万港元。CEO孙东

    热点头条 2023-04-15
    0
  • 全国迎来集中返程客流(铁路预计发送旅客1155万人次)

    今天(10月6日)是国庆假期第六天,全国铁路、公路、民航纷纷迎来集中返程客流。铁路预计发送旅客1155万人次。铁路部门统筹疫情防控与运输组…

    2021-10-07
    0
  • 无锡失联女孩排除他杀(失联前究竟发生了什么)

    无锡失联女孩排除他杀,据无锡市公安局滨湖分局官方微博消息,滨湖警方发布了关于“23岁合肥女子牛某军在无锡失联”事件的警方通报。全文如下:12月10日18时许,无锡滨湖警方接到报警“

    2021-12-18
    0
  • 驾驶证最大驾驶年龄限制(驾驶员年龄限制多大不能开车)

    大家好,随着汽车的高速发展,以及人们的经济水平的不断提升,现如今汽车是遍地都是,那么驾照也就显得十分重要,毕竟驾照的考核,考过的人应该都知道其中的不易。就像是在闯关似的,有的人闯不过理论知识的第一关,有的人闯不过科二、科三的那关等等。但是很

    2021-12-15
    0
  • 梦幻西游天罡蹲点技巧(梦幻西游天罡星攻略)

    游戏的意义就在于它能够给人带来快乐,如果过多的掺杂其他的东西就失去了其本身的意义,大家好,我是小三,每天给大家分享游戏中的八卦趣事。天罡星和地煞星都是梦幻中战斗难度特别大的挑战类型的任务,只有各别服务器的大佬们才能够顺利的击杀,不过现在玩家角色的

    2022-01-07 热点头条
    0

发表回复

登录后才能评论