XDU 1003 B进制加法(高精度)
#include<bits/stdc++.h> using namespace std; long long mpow(long long a,long long b) { long long ans=1; if(b==0) return 1; while(b){ ans=ans*a; b--; } return ans; } long long fun(long long A[],long long t,int b) { long long i=0; while(t){ A[i++]=t%b; t/=b; } return i; } long long Decimal(char s[],int b) { long long len=strlen(s); long long v=0; for(long long i=0;i<len;i++){ if(s[i]>='0'&&s[i]<='9') v+=(s[i]-'0')*mpow(b,len-1-i); else{ if(s[i]=='A') v+=10*mpow(b,len-1-i); if(s[i]=='B') v+=11*mpow(b,len-1-i); if(s[i]=='C') v+=12*mpow(b,len-1-i); if(s[i]=='D') v+=13*mpow(b,len-1-i); if(s[i]=='E') v+=14*mpow(b,len-1-i); if(s[i]=='F') v+=15*mpow(b,len-1-i); } } return v; } int main() { long long b,g,h1,h2,sum; char s1[200],s2[200]; while(scanf("%lld%s%s",&b,s1,s2)!=EOF) { char s[200]; long long A[200]; h1=Decimal(s1,b),h2=Decimal(s2,b); sum=h1+h2; g=fun(A,sum,b); for(long long i=0;i<g;i++){ if(A[i]<10) s[g-1-i]=A[i]+48; else{ if(A[i]==10) s[g-1-i]='A'; if(A[i]==11) s[g-1-i]='B'; if(A[i]==12) s[g-1-i]='C'; if(A[i]==13) s[g-1-i]='D'; if(A[i]==14) s[g-1-i]='E'; if(A[i]==15) s[g-1-i]='F'; } } s[g]='\0'; puts(s); } return 0; }