📜  循环数(1)

📅  最后修改于: 2023-12-03 15:09:52.130000             🧑  作者: Mango

循环数

循环数(Circular Number)是指一个数在特定进制下每个数位上的数字与它向右旋转后所得到的数位排列完全相同的数。例如,197是一个以十进制表示的循环数,因为它的每个数位上的数字与向右旋转之后的数字排列完全相同,旋转后得到的数字是971和719。

在计算机编程中,循环数的概念也经常被使用。在以下的介绍中,我们主要讨论数字的循环移位运算和如何判断一个数是否是循环数。

循环移位运算

循环移位运算是指将一个二进制数的所有位向左或向右移动n位,并将超过最高位或最低位的位移动到最低位或最高位的一种运算,它主要分为循环左移和循环右移两种方式。

循环左移

循环左移是指将一个数的所有位向左移动n位,并将超过最高位的n个位移动到最低位上的一种运算。循环左移运算可以使用左移运算符和按位或运算符来实现。下面是C语言实现循环左移的代码:

unsigned int rotate_left(unsigned int x, int n) {
    return (x<<n) | (x>>(sizeof(int)*8-n));
}
循环右移

循环右移是指将一个数的所有位向右移动n位,并将低于最低位的n个位移动到最高位上的一种运算。循环右移运算可以使用右移运算符和按位或运算符来实现。下面是C语言实现循环右移的代码:

unsigned int rotate_right(unsigned int x, int n) {
    return (x>>n) | (x<<(sizeof(int)*8-n));
}
判断循环数

如何判断一个数是否是循环数呢?以下是基于给定进制的判断循环数的通用方法:

  1. 首先,我们需要将这个数转化成字符串,然后保存它的长度。
  2. 接着,我们循环移动这个数的每个数位,将它们重新排列组成一个新的数字。
  3. 最后,我们将这个新数字与原始数字进行比较,如果它们相等,则说明这个数字是循环数。

以下是一个Python的实现:

def is_circular_number(n, base=10):
    s = str(n)
    l = len(s)
    for i in range(l):
        n = (n // base) + ((n % base) * (base ** (l-1)))
        if n == m:
            return True
    return False
总结

循环数在计算机编程中经常被使用,它的特点是对于在一个特定进制下,它的每个数位上的数字与向右旋转之后的数字排列完全相同。我们介绍了循环移位运算的两种方式,以及如何判断一个数是否是循环数。