多位尾数前移

尾数前移问题 

问题分析: 

首先,理解何为尾数前移问题: 例如:一个整数n的尾数是9,把尾数9移到其前面(成为最高位)
 后所得的数为原整数n的3倍,这就是尾数前移问题。
将其一般化: 就是一个整数n的尾数是q,把尾数q移到其最高位,所得的数为原整数n的p倍 。

解题思路: 

可以采用逆向思维
 设n为123***2q,尾数q移到前面变成q123***2,
意味着 q123***2可以整除p,商为123***2q 

竖式除法模拟: 

c = q % p
b = q / p ; 
这样就能将b作为n的首位数 进入循环,当c=0或商b=q时结束
即 循环条件为 c != 0 || b != q
  在循环中,计算被除数a = c * 10 + b
注意b是上一轮试商的商, 即向后递进: b = a / p; c = a % p;

代码实现如下:

public class Demo1 {
	public static void main(String[] args) {
		int a; // 用于存储进位的数

		Scanner input = new Scanner(System.in);
		System.out.println("请输入整数n的指定尾数:");
		int q = input.nextInt(); // 整数n的尾数
		System.out.println("请输入前移后n的倍数:");
		int p = input.nextInt(); // n的倍数

		int b = q / p; // 商
		int c = q % p; // 余数
		System.out.print("n(" + q + "," + p + ")=" + b);
		
		//当余数不为0或者商不等于它本身,执行循环
		while(c != 0 || b != q){
			//持续进行向后进位
			a = c * 10 + b;		//进位
			b = a / p;			//将商赋值给b
			c = a % p;			//将余数赋值给c
			System.out.print(b);	//每次都将b的结果打印出来
			
		}
		System.out.println();
		
		input.close();

	}

}


运行结果:











  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值