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