算法前导知识
1.进制转换
方法:除基取余,直到商为0,余数反转
十进制转换成二、八、十六进制
方法:除基取余,直到商为0,余数反转
我自己的思路是:
首先要创建一个数组,用来接收每一位余数,由于最后余数需要反转,如果要依次存放每一个余数,最后需要把数组倒着输出。但是在编译的时候出现了一个bug,就是数组首先会默认里面全是0,我本定义的数组长度可能不是刚好符合用来存储余数的长度,就导致了后来输出的时候,没有用到的数组位置上还是0
然后我就用了一个count变量来计算余数的个数,也相当于存放余数数组的下标吧,从count-1倒着输出
package com.wang.lanqiao.jinzhi;
public class shizhuaner {
public static void main(String[] args) {
int num = 100;
int count=0; //用来计算余数的个数
int sum = 0;
int[] arr= new int[10];
while(num!=0){
arr[count] = num%2;
count++;
num/=2;
}
for (int i=count-1;i>=0;i--){ //这里需要减1,因为在while循环里面,最后一个余数被数组接受之后,count还自增1
System.out.println(arr[i]);
}
}
}
然后,现在进行优化一下,就是输入一个十进制数字,输入你想转化的进制数,输出这个你想要的进制数
package com.wang.lanqiao.jinzhi;
import java.util.Scanner;
public class shizhuaner {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入一个十进制整数:");
int num = scanner.nextInt();
System.out.println("输入你想要转换的进制:");
int radix = scanner.nextInt();
int count=0;
int sum = 0;
int[] arr= new int[10];
while(num!=0){
arr[count] = num%radix;
count++;
num/=radix;
}
for (int i=count-1;i>=0;i--){
System.out.print(arr[i]);
}
}
}
在写完这个基础算法题之后,在网上查阅,知道了有一个直接转换进制的方法
1.十进制转换成其他常用的进制直接调用方法
10进制转化其他进制 | 对应的方法参数:n(原10进制数据),radix(进制) | 返回值 |
---|---|---|
10进制转2进制 | Integer.toBinaryString(n); | 一个二进制字符串 |
10进制转8进制 | Integer.toOctalString(n); | 一个八进制字符串 |
10进制转16进制 | Integer.toHexString(n); | 一个16进制字符串 |
10进制转 radix进制 | Integer.toString(n, radix); | 一个r进制字符串 |
这里的n和radix都是 int 类型的
package com.wang.lanqiao.jinzhi;
import java.util.Scanner;
public class shizhuaner {
public static void main(String[] args) {
System.out.println(Integer.toString(100,2));
System.out.println(Integer.toString(100,8));
System.out.println(Integer.toString(100,16));
}
}
二、八、十六进制转换成十进制
2.二、八、十六进制转换成十进制直接调用方法
10进制转化其他进制 | 对应的方法参数:s(原10进制数据),radix(进制) | 返回值 |
---|---|---|
radix进制转10进制 | Integer.valueOf(“1100100”,2) | 一个十进制 |
radix进制转10进制 | Integer.parseInt(“10”,8) | 一个十进制 |
s是String类型的,radix是int类型的,这两种方法记住
package com.wang.lanqiao.jinzhi;
import java.util.Scanner;
public class shizhuaner {
public static void main(String[] args) {
System.out.print("请输入数字:");
String str = scanner.next(); //注意这个地方是String类型的,不是int类型的
System.out.print("请输入现在这个数的进制:");
Scanner scanner = new Scanner( System.in);
int jinzhi = scanner.nextInt();
int num = Integer.valueOf(str,jinzhi); //这个方法就是需要记住的
System.out.println(num);
}
}
package com.wang.lanqiao.jinzhi;
import java.util.Scanner;
public class shizhuaner {
public static void main(String[] args) {
System.out.println(Integer.toString(100,2));
System.out.println(Integer.toString(100,8));
System.out.println(Integer.toString(100,16));
System.out.println(Integer.valueOf("1100100",2));
System.out.println(Integer.toBinaryString(100));
System.out.println(Integer.toOctalString(100));
System.out.println(Integer.toHexString(100));
System.out.println(Integer.parseInt("1100110",2));
System.out.println(Integer.parseInt("10",8));
System.out.println(Integer.parseInt("10",16));
}
}
打卡,发布的三篇文章,虽然很基础的内容,我还是有所收获的。
有不对的地方,欢迎各位小伙伴指出哟,一起进步!!!