如何将不定长度的整数各位数字反转后输出&&任意的十进制整数转换为二进制形式返回输出

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值