1.整数各位数字反转
(1)思路
要将不定长度的整数反转输出,这必定要求此整数的每一位数字。而求各位的数字必定要取余、除法取整。如果知道是四位数,我们可以使它除以1000,求得最高位的数字,但目前不知道此整数是几位数,所以此法不可行。那么我们就只能反其道而行之,先取最低位(个位)数字,再取次低位(十位)数字,…直到取到最高位数字为止。
那么基本思路就是:用一个十进制数num除以10取商quotient1、取余remainder1,然后quotient1除以10取商quotient2、取余remainder2,再然后quotient2除以10取商quotient3、取余remainder3 …直到商quotient_n为0。最后将remainder1置于最高位,remainder2置于第2高位,…remainder_n置于最低位。
(2)实现代码
Scanner input = new Scanner(System.in); // 控制台输入工具
int num = 0; // 定义输入数字的变量
try {
System.out.print("请输入一个正整数:");
num = input.nextInt();
} catch (InputMismatchException e) {
System.out.println(e.getMessage());
}
int quotient = num; // 初始化整除的商,它初始值就是num
int remainder = 0; // 初始化整除的余数,它初始值就是为0
int reversedNum = 0; // 初始化反转后的整数,它初始值就是为0
/***
* 依次向高位方向取得各位上的数字 直到quotient等于0
*/
while (quotient > 0) {
remainder = quotient % 10; // 第一次循环取最低位(个位)的数字
quotient /= 10; // 若输入的数字是n位数,第一次循环quotient取得前n-1位数
/**
* 每新得一位数字,表明输入的数至少比之前循环次数(每轮循环得一位数)多一位数
* 所以要让上次的reversedNum乘以10,再加上本次循环取得的某位上的数字remainder
*/
reversedNum = reversedNum * 10 + remainder;
}
System.out.println("各位数字反转后是:" + reversedNum);
2.十进制整数转换为二进制形式
(1)思路
十进制数转二进制数,初高中老师曾教过我们可用短除法求得。用一个十进制数num除以2取商quotient1、取余remainder1,然后quotient1除以2取商quotient2、取余remainder2,再然后quotient2除以2取商quotient3、取余remainder3 …直到商quotient_n为0。最后将remainder1置于最低位,remainder2置于第2低位,…remainder_n置于最高位。即将这些依次取得的余数反序排列,就形成了二进制形式的字符串。
但我却不完全这么去做,这里可以参考前面将一整数各位数字反转的所使用方法。只需要在上个案例代码稍加改动即可,将循环体的取模、取商的除数由“10”改为“2”,实质上最终还是以十进制数输出的,但其字面显示上却是二进制形式的。
(2)实现代码
Scanner input = new Scanner(System.in); // 控制台输入工具
int num = 0; // 定义输入数字的变量
try {
System.out.print("请输入一个正整数:");
num = input.nextInt();
} catch (InputMismatchException e) {
System.out.println(e.getMessage());
}
int quotient = num; // 初始化商,它初始值就是num
int remainder = 0; // 初始化余数,它初始值就是为0
int binaryNum = 0; // 初始化转为二进制的整数,它初始值就是为0
/***
* 依次向高位方向取余
*/
int index=0; //10的指数
while (quotient > 0) {
remainder = quotient % 2;
quotient /= 2;
/*
* 最先取出的余数是最低位,所以指数从0开始,
* Math.pow(10, i)作用是若是十位上的数就乘10,百位就乘以100,
* 即提高余数[0-1]数字的权重级别
*/
binaryNum += remainder*Math.pow(10, index);
index++; // 每循环一次,就向高位方向前进一位,index自增一次
}
System.out.println("转为二进制数后是:" + binaryNum);