用 C++ 统计可被 8 整除的旋转数
给定一个大数。目标是统计该数字的旋转数中,有多少个可以被 8 整除。
由于旋转不能无限次进行,我们将使用可被 8 整除的特性。如果最后三位数字可以被 8 整除,那么该数字就可以被 8 整除。如果数字是 1800,那么它的旋转将是 1800、0180、0018、8001,其中 1800 可以被 8 整除。
让我们通过例子来理解。
输入 − num=15320
输出 − 可被 4 整除的旋转数的个数为:1
说明 − 旋转为 −
15320, 01532, 20153, 32015, 53201 Out of these, only 15320 is divisible by 8.
输入 − num=848484
输出 − 可被 4 整除的旋转数的个数为:3
说明 − 旋转为 −
848484, 484848, 848484, 484848, 848484, 484848 Out of this all 484848’s are divisible by 8.
下面程序中使用的算法如下
我们将数字转换为字符串,并使用 for 循环遍历该数字。对于每三位数字,将其转换为整数并检查是否可以被 8 整除。如果可以被整除,则递增计数。
将数字作为 long long num。
函数 Rotation_8(long long num) 获取数字 num 并返回 num 的可被 8 整除的旋转数的个数。
将 num 转换为字符串 str=to_string(num)。
num 中的数字个数将为 length=str.length()。
使用临时变量 digit=0 存储三位数字的整数值。
将初始计数设置为 0。
如果 length 为 1,则仅存在一位数字。将其转换为整数,digit=(str.at(0)-’0’)。检查是否可以被 8 整除,并返回结果 1 或 0。
如果 length 为 2,则仅存在两位数字。将其转换为整数,part_1=(str.at(0)- ’0’) 和 part_2 = (str[1] - '0') * 10 + (str[0] - '0')。检查是否可以被 8 整除,并返回结果 1 或 0。
否则,对于长度大于或等于三位数字的情况,使用 for 循环从 i=0 到 i=length-1 遍历字符串,并将三个字符转换为整数值,方法为 digit = (str[i] - '0') * 100 + (str[i + 1] - '0') * 10 + (str[i + 2] - '0');。如果 digit 的值可以被 8 整除,则递增计数。
对由最后一位数字和前两位数字组成的对执行相同的操作,方法为 digit = (str[length - 1] - '0') * 100 + (str[0] - '0') * 10 + (str[1] - '0');
检查是否可以被 8 整除并更新计数。
最后,返回计数作为结果。
示例
#include <bits/stdc++.h> using namespace std; int Rotation_8(long long num){ string str = to_string(num); int length = str.length(); int digit = 0, count = 0; if (length == 1){ if(digit % 8 == 0){ return 1; } else{ return 0; } } else if(length == 2){ int part_1 = (str[0] - '0') * 10 + (str[1] - '0'); int part_2 = (str[1] - '0') * 10 + (str[0] - '0'); if (part_1 % 8 == 0){ count++; } if (part_2 % 8 == 0){ count++; } return count; } else{ for(int i = 0; i < (length - 2); i++){ digit = (str[i] - '0') * 100 + (str[i + 1] - '0') * 10 + (str[i + 2] - '0'); if (digit % 8 == 0){ count++; } } } digit = (str[length - 1] - '0') * 100 + (str[0] - '0') * 10 + (str[1] - '0'); if(digit % 8 == 0){ count++; } digit = (str[length - 2] - '0') * 100 + (str[length - 1] - '0') * 10 + (str[0] - '0'); if(digit%8 == 0){ count++; } return count; } int main(){ long long num = 24040; cout<<"Count of rotations divisible by 8 are: "<<Rotation_8(num); return 0; }
输出
如果我们运行上述代码,它将生成以下输出:
Count of rotations divisible by 8 are: 3