算法练习题23——整除数列

题目

问题描述

给定一个整数 ( n ),生成一个序列。序列的第一个数是 ( n ),后面的每个数均是前一个数整除 2 的结果,直到结果为零为止。输出这个序列中所有大于零的项。

输入格式

        输入一行,包含一个整数 ( n )。

输出格式

        输出一行,包含多个整数,表示序列中所有大于零的项,相邻整数之间用一个空格分隔。

解题思路

要生成这样的序列,最直接的方法是从给定的整数 ( n ) 开始,不断将其除以 2,直到结果为 0 为止。每次除以 2 时,结果都保留在序列中。考虑到序列中的所有数都必须大于 0,所以在每次计算时要检查结果是否为正。

        除法运算:每次将当前数除以 2。

        停止条件:当结果为 0 时停止。

        位移运算:右移操作 n >>= 1 可以用于快速计算除以 2 的结果。

位移运算

位移运算(Shift Operations)是一种对二进制数字进行操作的运算,常见的有 左移运算右移运算。这类运算通过将数字的二进制形式向左或向右移动来改变其值,非常高效,尤其在涉及到乘法和除法时。

1. 左移运算(<<)

左移运算就是把一个数的二进制位向左移动一段距离,右边补上 0,左边被移出去的部分直接丢掉。

        公式: x << n 表示将 x 的二进制位向左移动 n 位。

        效果: 对于正整数,左移相当于将数字乘以 2^n

例子: 假设我们有一个整数 5,它的二进制表示是 101

  • 如果我们做 5 << 1(向左移动一位),就相当于在二进制末尾补 0

    • 101 << 1 → 1010,这就是 10 (十进制)。
    • 所以,5 << 1 = 10
  • 如果我们做 5 << 2(向左移动两位),会变成:

    • 101 << 2 → 10100,这就是 20 (十进制)。
    • 所以,5 << 2 = 20

简单来说,左移 n 位相当于乘以 2^n。比如左移一位就相当于乘以 2,左移两位就相当于乘以 4。

2. 右移运算(>>)

右移运算是把一个数的二进制位向右移动,左边用符号位(对于正数就是 0,负数是 1)来填补,右边被移出去的部分被丢掉。

  • 公式: x >> n 表示将 x 的二进制位向右移动 n 位。
  • 效果: 对于正整数,右移相当于将数字除以 2^n,并取整。

例子: 还是用 5 这个数,它的二进制表示是 101

  • 如果我们做 5 >> 1(向右移动一位),就相当于去掉最低位:

    • 101 >> 1 → 10,这就是 2 (十进制)。
    • 所以,5 >> 1 = 2
  • 如果我们做 5 >> 2(向右移动两位),会变成:

    • 101 >> 2 → 1,这就是 1 (十进制)。
    • 所以,5 >> 2 = 1

简单来说,右移 n 位相当于除以 2^n 并向下取整。右移一位相当于除以 2,右移两位相当于除以 4。

代码

import java.util.Scanner;

public class DivisibleSequence {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(); // 输入整数 n
        scanner.close();

        StringBuilder result = new StringBuilder(); // 用于存储结果序列

        while (n > 0) {
            result.append(n).append(" "); // 将当前 n 添加到结果序列中
            n >>= 1; // 右移一位,相当于 n 除以 2
        }

        System.out.println(result.toString().trim()); // 输出结果序列,去掉末尾的空格
    }
}
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值