十进制转自定义进制(Java版和Python版)(探索ing)


  为了实现excel表格最顶端的字母排序,就绞尽脑汁想了下如何实现自定义进制。俺想的实现方法可能比较复杂。

  如能简化或者大家有更方便的操作,麻烦跟我说下呗,互相学习嘛,嘿嘿。多谢了啦♪(^∇^*)

Java版

这边直接代码过来

public static void main(String[] args) {
        String SetStyle = "0123456789ABCDEF";//确定进制格式
        int digit = SetStyle.length();//确定进制数
        String[] get = null;//存储各位的数值
        Scanner sc = new Scanner(System.in);//获取输入
        int num = sc.nextInt();
        int origin = num;//使后面数值可还原
        int size = 1;//统计位数
        if(num >= digit){
            /*确定位数*/
            while (num >= digit){
                num = num / digit;
                size += 1;
            }
            num = origin;//赋值为输入值,方便下一步进位

            /*进位操作*/
            get = new String[size];
            for(int i = 1;num >= digit;i++){
                get[get.length - i] = String.valueOf(num % digit);//余数
                num = num / digit;
                get[get.length - i - 1] = String.valueOf(num);
            }
        }else {//不满足进位要求
            get = new String[size];
            get[0] = String.valueOf(num);
        }
        for(int i = 0;i < get.length;i++){
            System.out.print("第" + (i+1) + "位:" + get[i] + " ");
        }
        System.out.println();
        /*将值转换为进位的格式*/
        for(int i = 0;i < get.length;i++){
            int get1 = Integer.parseInt(get[i]);
            get[i] = SetStyle.substring(get1, get1 + 1);//截取字符
        }
        /*输出位数*/
        for(int i = 0;i < get.length;i++){
            System.out.print("第" + (i+1) + "位:" + get[i] + " ");
        }
    }

  上面的"SetStyle"的格式是16进制的,这边输入个180,看看输出效果。

  没毛病,输出正确。(表示我还特意加了下-16 * 11 + 4 = 180,以免翻车,哈哈)

  我上面代码,直接复制过去就可以用了。改“SetStyle”的进制格式,就可以自定义。应该晓得吧?这边说明下,一个位数只能代表一个字符。不要想着0就是AA,1是AB之类的。我这边没实现这种。但是也可以的。提示:在注释“截取字符”那里改下就行。

Python版

这边依然是代码直接复制过来。

SetStyle = "0123456789ABCDEF"  # 确定进制格式
digit = len(SetStyle)  # 确定进制数
num = int(input())  # 获取值
get = [num]  # 定义列表

# 确定各位数的值
if num >= digit:  # 满足进制条件
    while num >= digit:
        num1 = num  # 方便后面取余
        num = int(num / digit)
        get.insert(0, num)
        get[1] = num1 % digit

# 将各位数的转化为定义的进制格式
for i in range(len(get)):
    get[i] = SetStyle[int(get[i])]
print(get)

这边的代码量再次展现python的代码量少呀!
咱这次输入个3456,看看输出结果。

其实编辑的时候翻车了,有个参数搞错了,问题不大,哈哈
这边计算下,避免翻车,哈哈
在这里插入图片描述
  没毛病。python版的呢,修改"SetStyle"即可就修改进制格式了。同样,想两个字符作或多个为0或其他的表示(前面Java版有提过),在注释"将各位数的转化为定义的进制格式"下面的代码做做文章皆可以了




  OK,差不多就是这样,希望对各位阅读的小伙伴有所帮助。emmmm,若有什么不足、不懂之处以及BUG等呢,可以在评论区或私信告诉我哦,多谢了!下次再会,,,溜了溜了,哈哈(2021.6.23)




最后,感谢你阅读我的文章,感恩!

posted @ 2022-09-14 22:05  晓星晨曦  阅读(104)  评论(0编辑  收藏  举报