题目大意
你的任务是计算大整数
Dmod(B−1)
,其中B是D的进制数。
比如:
782910 mod 9 = 8
377777777777777738 mod 7 = 6
1234567 mod 6 = 3
其中:377777777777777738 = 112589990684261910 还有 1234567 = 2287510
输入
第一行一个整数 P(1≤P≤1000) ,表示数据组数。接下来对于每组数据,一行3个整数为数据组数,第二个整数 B(2≤B≤10) ,表示进制基,第三个整数 D(log10D≤10,000,000) ,为B进制下的表示。
输出
对于每组数据,输出一行2个整数,第一个整数为数据组数,第二个整数为 Dmod(B−1) 。
样例输入
5
1 10 7829
2 7 123456
3 6 432504023545112
4 8 37777777777777773
5 2 10110100010101010101101110001010001010101010101010111
样例输出
1 8
2 3
3 1
4 6
5 0
题解
因为乘法和加法都可以模。因此D可以表示为
D0×Bn+D1×Bn−1+⋯+Dn−1×B+Dn
或者这么表示:
D0+B(D1+B(D2+⋯))
然后就知道怎么做啦。
// UVALive 6173, HDU 4485
#include <cstdio>
int main() {
int T, kase, base, sum;
char c;
scanf("%d", &T);
while (T--) {
scanf("%d%d", &kase, &base);
sum = 0;
while ((c = getchar()) != '\n') {
if (c == ' ' || c == '\n') continue;
(sum = sum * base + c - '0') %= base - 1;
}
printf("%d %d\n", kase, sum);
}
return 0;
}