循环分支(初学者练习)cpp

对于两个正整数n, m,如果将n末尾的几个数字平移(不改变被移动的数字的顺序)到n的首端从而能得到m,则称n和m是循环的。例如(123, 312)是循环的,(123, 231)也是循环的,对于前者,你可以把末尾的3移动到12之前,从而得到312;对于后者,你可以把末尾的23移动到1之前,从而得到231。n和m的位数一定要相同,且他们都不会存在前置的0(指如01这样的数)。

现在给定正整数A、B(1<=A,B<=10000),求存在多少对循环的数(n, m),满足A<=n<m<=B

代码如下

img


#include<math.h>#includeusing namespace std;int main(){ int N; cin >> N; int b, sum, l, m; bool k; int A[99], B[99]; for (int t = 0; t <= N - 1; t++) { cin >> A[t]; cout << " "; cin >> B[t]; } for (int i = 0; i <= N-1; i++) { sum = 0; for (int a = A[i]; a <= B[i]; a++) { bool s = (a / 1000 != 0), d = (a / 100 != 0), f = (a / 10 != 0); for (int o = 1; o <= s + d + f; o++) { l = pow(10, o); m = pow(10, s + d + f+1); b = a / l + (a % l) * m / l; k = (b <= B[i] && b != a && b >= A[i] && (a + 9 * m / 10) / m == (b + 9 * m / 10) / m); sum += k; } } cout << sum / 2 << endl; } }
测试系统要求如下

img


调试正确但系统不给过