BestCoder Round #33——1001——zhx's submissions

问题描述
作为史上最强的刷子之一,zhx在各大oj上交了很多份代码,而且多数都AC了。

有一天,zhx想数一数他在n个oj上一共交了多少份代码。他现在已经统计出在第i个oj上,他交了ai份代码。而把它们加起来就是你的工作了。 当然zhx是一个不走寻常路的人,所以他的数字都是用B进制表示的。而他也要求你告诉他B进制的数。 但是zhx有一个恶趣味的习惯,他算加法的时候从来不进位。比如他算十进制5+6的答案是1。而且他还要求你也要按照他的方式来做加法。
输入描述
多组数据(不超过1000组)。读到文件尾。 对于每组数据,第一行是两个空格分开的正整数nB(1n100, 2B36) 接下来n行,每行一个B进制数ai。数码是0到9和小写a到z。输入可能包含前导0,数字长度不超过200位。
输出描述
对于每组询问输出一行一个B进制数表示答案。不能包含前导0。
输入样例
2 3

2

2

1 4

233

3 16

ab

bc

cd
输出样例
1

233

14

 大意:大数加法,要考虑全为零的情况

#include<cstdio>

#include<iostream>

#include<cstring>

using namespace std;

int main()

{

    int n,B,i,j,maxn,flag,flag1,m;

    int s[210];

    char a[210][210];

    while(cin>>n>>B){

        m = flag = flag1 = maxn = 0;

    memset(s,0,sizeof(s));

    for(int i = 0 ; i < n ; i++)

        cin >> a[i];

    for(int i = 0 ; i < n ; i++){

            m = 0;

           if(strlen(a[i]) > maxn)

            maxn = strlen(a[i]);

           for(int j = strlen(a[i])-1;j >= 0;j--){

                if(a[i][j] >= '0' &&a[i][j] <='9'){

                  s[m] += a[i][j] - '0';

                  s[m] %= B;

                }

                else {

                s[m] += a[i][j] + 10 - 'a';

                s[m] %= B;

                }

                m++;

           }

    }

    for(int i = maxn - 1; i >= 0; i--){

            if(s[i] == 0 && flag == 0){

                    flag1++;

            }

            else {

                flag = 1;

               if(s[i] >= 0 && s[i] <= 9)

                printf("%d",s[i]);

               else printf("%c",s[i] - 10 + 'a');

            }

    }

    if( flag1 == maxn)

        cout << '0';

    printf("\n");

    }

    return 0;

}
View Code

 

你可能感兴趣的:(round)