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
时间: 2024-10-18 14:50:50