HDU 5832 A water problem 【大数取模】

题目大意:

告诉你个长度为$10000000$的数字,问这个数字是否既是73的倍数又是137的倍数。

解题思路:

大数取模。
c++的大数取模是根据秦九韶公式来的,

举个例子来说$123 = ((1 \times 10 + 2) \times 10) + 3$,

而$(a \times b) \% M = a \% M \times b \% M$,

然后我们就能得到$123 \% M = ((1 \% M \times 10 + 2) \% M \times 10) \% M + 3 \% M$。

Mycode:

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
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N = 10000010;
const int M1 = 73;
const int M2 = 137;

char s[N];
int main()
{
for(int cas = 1; ~scanf("%s", s); ++cas)
{
int len = strlen(s);
int sum1 = 0, sum2 = 0;
for(int i = 0; i < len; ++i)
{
sum1 = (sum1 * 10 + s[i] - '0') % M1;
sum2 = (sum2 * 10 + s[i] - '0') % M2;
}
printf("Case #%d: %s\n", cas, (!sum1 && !sum2) ? "YES" : "NO");
}
return 0;
}
Donate comment here
0%