HDU 5186 zhx's submissions 模拟,细节 难度:1

时间:2022-12-16 22:36:12

http://acm.hdu.edu.cn/showproblem.php?pid=5186

题意是分别对每一位做b进制加法,但是不要进位

模拟,注意:1 去掉前置0 2 当结果为0时输出0,而不是全部去掉

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=101;
const int maxm=201;
int n,b;
char a[maxn][maxm];
int len[maxn];
char ans[maxm];
int getnum(char c){
        if(c>='0'&&c<='9')return c-'0';
        return c-'a'+10;
}
char getchar(int t){
        if(t<10)return '0'+t;
        return 'a'+t-10;
}
void add(int ind,int num){
        int tmp=(getnum(ans[ind])+num)%b;
        ans[ind]=getchar(tmp);
}
int main(){
        while(scanf("%d%d",&n,&b)==2){
                int mxlen=0;
                for(int i=0;i<n;i++){
                        scanf("%s",a[i]);
                        len[i]=strlen(a[i]);
                        mxlen=max(mxlen,len[i]);
                }
                for(int i=0;i<mxlen;i++)ans[i]='0';
                ans[mxlen]=0;
                for(int j=1;j<=mxlen;j++){
                        for(int i=0;i<n;i++){
                                if(len[i]>=j){
                                        add(mxlen-j,getnum(a[i][len[i]-j]));
                                }
                        }
                }
                int ind;
                for(ind =0;ans[ind]=='0'&&ind<mxlen-1;ind++){}
                printf("%s\n",ans+ind);

        }
        return 0;
}