题意
判断a%b ?= 0
a (-10^200 ≤ a ≤ 10^200) and b (|b| > 0, b fits into a 32 bit signed integer).
思路
( a + b)% n = ((a % n) + (b % n)) % n
(a - b) % n = ((a % n) - (b % n) + n) % n
a * b % n = (a % n) * (b % n) % n
下面是对大整数取模,边乘边取余。证明就用上面的定理。
用字符数组存大整数str
int ans = 0;
for(int i =0; i < str.length(); ++i)
ans = (ans * 10 + str[i] - ‘0’) % MOD;
代码
// https://blog.csdn.net/baisedeqingting/article/details/75670303
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int main () {
int T;
scanf ( "%d", &T );
for ( int ks = 1; ks <= T; ++ks ) {
char str[ 205 ];
int b;
scanf ( "%s%d", str, &b );
if ( b < 0 )
b = -b;
int cnt;
// long long
long long ans;
int len = strlen ( str );
if ( str[ 0 ] == '-' ) {
ans = str[ 1 ] - '0';
cnt = 2;
} else {
ans = str[ 0 ] - '0';
cnt = 1;
}
ans = ans % b;
for ( int i = cnt; i < len; ++i )
ans = ( ans * 10 + ( str[ i ] - '0' ) ) % b;
if ( ans )
printf ( "Case %d: not divisible\n", ks );
else
printf ( "Case %d: divisible\n", ks );
}
return 0;
}