题目链接:https://vjudge.net/problem/LightOJ-1214
Time Limit: 1 second(s) | Memory Limit: 32 MB |
Given two integers, a and b, you should check whether a is divisible by b or not. We know that an integer a is divisible by an integer b if and only if there exists an integer c such that a = b * c.
Input
Input starts with an integer T (≤ 525), denoting the number of test cases.
Each case starts with a line containing two integers a (-10200 ≤ a ≤ 10200) and b (|b| > 0, b fits into a 32 bit signed integer). Numbers will not contain leading zeroes.
Output
For each case, print the case number first. Then print 'divisible' if a is divisible by b. Otherwise print 'not divisible'.
Sample Input |
Output for Sample Input |
6 101 101 0 67 -101 101 7678123668327637674887634 101 11010000000000000000 256 -202202202202000202202202 -101 |
Case 1: divisible Case 2: divisible Case 3: divisible Case 4: not divisible Case 5: divisible Case 6: divisible |
题解:
单纯的大数求模。从高位处理到低位。
代码如下:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <vector> 6 #include <cmath> 7 #include <queue> 8 #include <stack> 9 #include <map> 10 #include <string> 11 #include <set> 12 using namespace std; 13 typedef long long LL; 14 const int INF = 2e9; 15 const LL LNF = 9e18; 16 const int mod = 1e9+7; 17 const int MAXM = 1e5+10; 18 const int MAXN = 5e5+10; 19 20 char a[220]; 21 int b; 22 23 int main() 24 { 25 int T, kase = 0; 26 scanf("%d", &T); 27 while(T--) 28 { 29 scanf("%s%d", a, &b); 30 int len = strlen(a); 31 b = abs(b); 32 LL s = 0; 33 for(int i = (a[0]=='-'); i<len; i++) 34 { 35 s *= 10, s += a[i] - '0'; 36 s %= b; 37 } 38 printf("Case %d: %s ", ++kase, s?"not divisible":"divisible"); 39 } 40 }