题意:
问b是否能整除a
思路:
大数求余,利用同余。
#include<stdio.h>
#include<string.h>
typedef long long ll;
char str[205];
int main()
{
int T, b;
scanf("%d", &T);
for(int kase = 1; kase <= T; kase++)
{
ll rem = 0;
scanf("%s%d", str, &b);
if(b < 0) b = -b;
for(int i = 0; i < strlen(str); i++)
{
if(str[i] == '-')
continue;
rem = (rem*10+(str[i]-'0')) % b;
}
printf("Case %d: ", kase);
if(rem) puts("not divisible");
else puts("divisible");
}
return 0;
}
让我想起了——天梯决赛L1-046. 整除光棍,实际上也是利用了这个道理,但是当时的通过率并不高,只想到了用java。
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n;
while(cin >> n)
{
int cnt = 1, tmp = 1;
for(; ; cnt++)
{
if(tmp % n == 0)
break;
tmp = (tmp*10+1) % n;
}
tmp = 1;
bool flag = true;
for(int i = 1; i <= cnt; i++)
{
if(tmp/n == 0 && flag);
else
{
flag = false;
printf("%d", tmp / n);
}
tmp = tmp % n;
tmp = tmp * 10 + 1;
}
cout << " " << cnt << endl;
}
return 0;
}