小Q得到一个神奇的数列: 1, 12, 123,…12345678910,1234567891011…。
并且小Q对于能否被3整除这个性质很感兴趣。
小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。
输入描述:
输入包括两个整数l和r(1 <= l <= r <= 1e9), 表示要求解的区间两端。
输出描述:
输出一个整数, 表示区间内能被3整除的数字个数。
输入例子1:
2 5
输出例子1:
3
例子说明1:
12, 123, 1234, 12345… 其中12, 123, 12345能被3整除。
时空限制:
时间限制:1秒 空间限制:32768K
解题思路:
对于一个数是否可以被3整除,只需要判断每一位的总和能否被3整除。
12 -> (1 + 2) % 3 == 0 被3整除
123 ->(1 + 2 + 3) % 3 == 0 被3整除
1234 -> (1 + 2 + 3 + 4) % 3 == 1 不被3整除
12345 -> (1 + 2 + 3 + 4 + 5) % 3 == 0 被3整除
#include <iostream>
#include <stdlib.h>
#include <algorithm>
#include <vector>
using namespace std;
class Solution{
public:
int dividedByThree(int l, int r){
if(l > r) return 0;
long long sum = 0; // 求和
int res = 0;
for(int i = 0; i < l; ++i){
sum += i;
}
for(int i = l; i <= r; ++i){
sum += i;
if(sum % 3 == 0){
++res;
}
}
return res;
}
};
int main(){
int l, r;
cin >> l >> r;
Solution s;
cout << s.dividedByThree(l, r);
return 0;
}