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("
");
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/zero-begin/p/4339594.html