#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.