标签:
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;
}
HDU 5186 zhx's submissions 模拟,细节 难度:1
标签:
原文地址:http://www.cnblogs.com/xuesu/p/4338608.html