2019_被3整除

https://www.nowcoder.com/practice/51dcb4eef6004f6f8f44d927463ad5e8?tpId=98&tqId=32825&tPage=1&rp=1&ru=/ta/2019test&qru=/ta/2019test/question-ranking

如果一个数各个位上的数字之和能被3整除,那么这个数就能被3整除
严格来水,应该是求每位数字相加的和,但是这样做会复杂度过大,通过率70%
下面的代码是将组成该数字的每个字符串的数字相加,可以通过,不懂原因
还有各种找规律的解法。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <cstdio>
#include <stdlib.h>
#include <string>

using namespace std;

long long num(int i){
long long sum = 0;
while(i){
sum += i % 10;
i = i / 10;
}

return sum;
}


int main(){
int l, r;
scanf("%d %d", &l, &r);
int res = 0;
long long sum = 0;
for(int i = 1; i < l; i++){
sum += i;
}

for(int i = l; i <= r; i++){
sum += i;
if(!(sum % 3)){
res++;
}
}

printf("%d\n", res);

return 0;
}
0%