Casting
Casting
Time Limit: 3000ms, Special Time Limit:7500ms, Memory Limit:65536KB
Total submit users: 23, Accepted users: 23
Problem 12598 : No special judgement
Problem description
Casting around for problems leads us to combine modular arithmetic with different integer bases, particularly the problem of computing values modulo b - 1, where b is the base in which the value is represented. For example, 
782910 mod 9 = 8 
377777777777777738 mod 7 = 6 
1234567 mod 6 = 3 
(Note that 377777777777777738 = 112589990684261910 and 1234567 = 2287510.) 
Your job is to write a program that reads integer values in various bases and computes the remainder after dividing these values by one less than the input base.



Input
The first line of input contains a single integer P, (1 ≤ P ≤ 1000), which is the number of data sets that follow. Each data set should be processed identically and independently. 
Each data set consists of a single line of input containing three space-separated values. The first is an integer which is the data set number. The second is an integer which is the number, B (2 ≤ B ≤ 10), denoting a numeric base. The third is an unsigned number, D, in base B representation. For this problem, the number of numeric characters in D will be limited to 10,000,000. 


Output
For each data set there is a single line of output. It contains the data set number followed by a single space which is then followed by the remainder resulting from dividing D by (B - 1 ). 


Sample Input
5
1 10 7829
2 7 123456
3 6 432504023545112
4 8 37777777777777773
5 2 10110100010101010101101110001010001010101010101010111

Sample Output
1 8
2 3
3 1
4 6
5 0
Problem Source
Greater New York Programming Contest 2012

 

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cmath>
 4 using namespace std;
 5 char a[10000000+10];
 6 int main(void){
 7 #ifndef ONLINE_JUDGE
 8   freopen("in", "r", stdin);
 9 #endif
10   int t; scanf("%d", &t);
11   while (t--){
12     int s, b; scanf("%d%d%s", &s, &b, a);
13     int len = strlen(a), po = 1, temp = 0;
14     for (int i = len-1; i >= 0; --i){
15       temp += (a[i]-'0') * po; temp %= (b-1);
16     }
17     printf("%d %d\n", s, temp);
18   }
19 
20   return 0;
21 }

求在某个进制的数字的余数,没卡。

posted on 2013-03-10 16:16  aries__liu  阅读(200)  评论(0编辑  收藏  举报