用 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
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP