因为 a 是个大数, b 不是,直接根据同余定理,把字符串 a 转化为数字的同时,不断地对 b 取模就好了
以下是 AC 代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
inline int read()
{
ll X=0,w=0; char ch=0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
return w?-X:X;
}
const int maxn = 1e5+5;
const int maxm = 1e4+5;
const int INF = 0x3f3f3f3f;
char a[maxn];
int main()
{
ll t = read();
ll cas = 1;
while(t --)
{
scanf("%s",a);
int b = read();
int st;
ll ans;
if(a[0] == '-')
{
ans = a[1] - '0';
st = 2;
}
else
{
ans = a[0] - '0';
st = 1;
}
if(b < 0)
b = -b;
ans = ans % b;
int len = strlen(a);
for(int i=st;i<len;i++)
{
ans = (ans*10%b + (a[i]-'0')%b)%b;
}
if(ans == 0)
printf("Case %d: divisible\n",cas++);
else
printf("Case %d: not divisible\n",cas++);
}
return 0;
}