View Code of Problem 3920

#include<bits/stdc++.h>
using namespace std;
int main() {
	long long q, m, n, i, sum, a[10], k, w, e, r, sum2;//n为页数,m为除数 
	cin >> q; getchar();
	while (q--) {
		cin >> n >> m;
		e = n / m;//有e个能被整除的数 
		sum = 0; sum2 = 0;//sum2是个位数组成的数组一次循环的和 
		k = 0;
		w = m;//w是能被整除的数 
		while (1) { // 求除数的个位项和以及循环组 即5 10 15 20 25 只取5 10 15 后面与前面重复
			a[k++] = w % 10; 
			sum2 += a[k - 1]; // 个位项和
			w += m; // 以m为倍数的数
			if (a[0] == w % 10 || w > n) { //判断除数是否开始循环或者除数已经大于页数
										   // 5 10 15 20 25 到15结束 因为a[0] == w % 10
									       // 5 10 到10结束 因为w 为15
				break;
			}
		}
		sum = e / k * sum2; // 循环组个数 如 5 10 15 为 1;5 10 15 20 为1;5 10 15 20 25 30 为2组
							// sum = 循环组个数 * 每个循环组的和
		for (i = 0; i < e%k; i++) { // 计算循环组多出来的值 如 5 10 15 20 计算20 即0;如 5 10 15 20 25 计算 20 25 即0+5
			sum += a[i];
		}
		cout << sum << endl;
		// 太妙了 想不到想不到 理解有误的话 敬请谅解
	}
}

Double click to view unformatted code.


Back to problem 3920