计算在C ++中被8整除的旋转

我们得到了很多。目标是计算可被8整除的num的旋转数。

由于旋转不能一次又一次地完成。我们将使用8整除属性。如果最后三位数可被8整除,则数字可被8整除。如果数字为1800,则其旋转数将为1800、1800、0180、0018、8001除以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并返回被8整除的num的旋转计数。

  • 将num转换为字符串str = to_string(num)。

  • num中的位数将是length = str.length()。

  • 取临时变量digit = 0来存储三位数的整数值。

  • 将初始计数设为0。

  • 如果length为1,则仅存在一个数字。将其转换为整数digit =(str.at-'0')。检查除数是否为8,并将结果返回为1或0。

  • 如果length为2,则仅出现两位数。将它们转换为整数,part_1 =(str.at-'0')和part_2 =(str [1]-'0')* 10 +(str [0]-'0')。检查除数是否为8,并将结果返回为1或0。

  • 否则,如果长度大于或等于三位数,请使用for循环遍历字符串,从i = 0到i = length-1,然后将三个字符转换为整数,数值为=(str [i]-'0')* 100 + (str [i + 1]-'0')* 10 +(str [i + 2]-'0'); 。如果数字的值可以被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