十进制转自定义进制(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)
最后,感谢你阅读我的文章,感恩!