1. 程式人生 > >Problem G: 圓周率

Problem G: 圓周率

rip b- pri bbs TP pid 二進制 can n-1

Problem G: 圓周率

Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 155 Solved: 99
[Submit][Status][Web Board]

Description

YT大學附小舉辦背誦圓率 PI 的比賽。誰背的正確的位數越多,誰為勝者。很多小學生背的位數很多,但是往往會有少數位置的數是錯誤的。為了快速加測出錯誤的圓周率,將圓周率 PI 小數點後的數字求模進行簡單驗證。 例如:某學生背的圓周率為 3.15,則1510 mod 9 = 6,可以初步判定該學生背的圓周率錯誤。 數有不同的進制表示,比如二進制、八進制、十進制等。現在給你一個任務,給定一個n進制,要它對n-1求模,比如: 782910
mod 9 = 8 377777777777777738 mod 7 =6 1234567 mod 6 =3 (註意:377777777777777738=112589990684261910 1234567 =2287510 ) 你的任務是讀入一些不同進制的數,求模。

Input

第一行表示為整數P(1≤P≤1000),表示一共的測試數據組數。 每組測試測試數據一行,由三個數組成,第一個數表示組號,第二個數B(2≤B≤10),表示B進制,第三個數D表示要求模的數,D的位數不超過10,000,000位。

Output

每組測試數據一行,每一個數為組號,第二個為 D mod (B-1)

Sample Input

6
1 10 7829
2 7 12345
3 6 432504023545112
4 8 37777777777777773
5 2 101011111111110000000000000000000011111111111111111111111
6 10 145784444444444457842154777777777547845993

Sample Output

1 8
2 3
3 1
4 6
5 0
6 6
#include<stdio.h>
#include<string.h>
int main()
{
    int p,k,t;
    int now=0;
    char str[1000005];
    scanf("%d",&p);
    while(p--)
    {
        scanf("%d%d%s",&t,&k,&str);
        now=0;
        int i;
        int len=strlen(str);
        for(i=0;i<len;i++)
        {
            now=now*k;
            now=now+str[i]-‘0‘;
            now=now%(k-1);
        }
        printf("%d %d\n",t,now);
    }
}

  

Problem G: 圓周率