C++中计算能被4整除的旋转数


给定一个很大的数字,目标是计算该数字的能被4整除的旋转数。

由于旋转不能无限次进行,我们将使用能被4整除的特性。如果最后两位数字能被4整除,则该数字能被4整除。例如,如果数字是1234,它的旋转将是1234、4123、3412、2341,其中3412能被4整除,因为最后两位数字12能被4整除。

让我们通过例子来理解。

输入 − num=15324

输出 − 能被4整除的旋转数:2

解释 − 旋转为:

15324, 41532, 24153, 32415, 53241

其中,15324和41532能被4整除。

输入 − num=848484

输出 − 能被4整除的旋转数 − 6

解释 − 旋转为:

848484, 484848, 848484, 484848, 848484, 484848

所有这些旋转都能被4整除。

下面程序中使用的算法如下:

我们将数字转换为字符串,并使用for循环遍历该数字。对于每对两位数字,将其转换为整数并检查是否能被4整除。如果能被整除,则递增计数。

  • 将数字作为long long num。

  • 函数Rotation_4(long long num)接收数字num并返回num能被4整除的旋转数。

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

  • num中的数字个数为length=str.length()。

  • 使用临时变量digit=0存储两位数字的整数值。

  • 将初始计数设置为0。

  • 如果length为1,则只存在一位数字。将其转换为整数,digit=(str.at(0)-’0’)

  • 检查是否能被4整除,并返回结果1或0。

  • 现在使用for循环从i=0到I <length-1遍历str。

  • 使用digit=(str.at(i)-'0')*10 + (str.at(i+1)-'0')构成两位数,因为每对数字都将成为旋转中的最后两位数字。

  • 对由最后一位和第一位数字构成的对执行相同的过程,使用digit=(str.at(length-1)-'0')*10 + (str.at(0)-'0');检查是否能被4整除并更新计数。

  • 最后返回计数作为结果。

示例

 在线演示

#include <bits/stdc++.h>
using namespace std;
int Rotation_4(long long num){
   string str = to_string(num);
   int length = str.length();
   int digit = 0, count = 0;
   if (length == 1){
      digit=(str.at(0)-'0');
      if(digit%4 == 0){
         return 1;
      }
      else{
         return 0;
      }
   }
   for (int i=0; i<(length-1); i++){
      digit = (str.at(i)-'0')*10 + (str.at(i+1)-'0');
      if(digit%4 == 0){
         count++;
      }
   }
   digit = (str.at(length-1)-'0')*10 + (str.at(0)-'0');
   if(digit%4 == 0){
      count++;
   }
   return count;
}
int main(){
   long long num = 24040;
   cout<<"Count of rotations divisible by 4 are: "<<Rotation_4(num);
   return 0;
}

输出

如果运行上述代码,它将生成以下输出:

Count of rotations divisible by 4 are: 4

更新于:2020年12月1日

633 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告