题意就是给n个b进制的数,求它们相加的和,有一个条件就是相加不进位,输出结果为没有前导0.
(原来有中文题的。只能说英文太渣没有看到输出结果没有前导0这个条件。)
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <set> #include <vector> #include <map> #include <queue> #include <set> #include <algorithm> #include <limits> using namespace std; typedef long long LL; const int MAXN=1e+4; const int MAXM=1e+5; const int INF = numeric_limits<int>::max(); const LL LL_INF= numeric_limits<LL>::max(); int getnums(char ch){ if(ch>='0'&&ch<='9')return ch-'0'; else return 10+ch-'a'; } char getchar(int num){ if(num>=0&&num<=9)return num+'0'; else return num-10+'a'; } char strs[200][300]; char tmp[300]; char ans[300]; int main() { int n,k; while(~scanf("%d%d",&n,&k)){ memset(strs,0,sizeof(strs)); for(int i=0;i<n;i++){ scanf("%s",tmp); for(int j=strlen(tmp)-1,k=0;j>=0;j--,k++){ strs[i][k]=tmp[j]; } } memset(ans,'0',sizeof(ans)); int m_len=0; for(int i=0;i<n;i++){ int len=strlen(strs[i]); m_len=max(len,m_len); for(int j=0;j<len;j++){ ans[j]=getchar((getnums(ans[j])+getnums(strs[i][j]))%k); } } int flag=m_len; for(;flag>0&&ans[flag]=='0';flag--); for(int i=flag;i>=0;i--)putchar(ans[i]); puts(""); } return 0; }
|