用 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

更新时间: 2020-12-01

240 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告