比赛 普及组2016模拟练习4 评测结果 AAAAAAAAAA
题目名称 火星上的加法运算 最终得分 100
用户昵称 _IOSTREAM_ 运行时间 0.003 s
代码语言 C++ 内存使用 14.69 MiB
提交时间 2016-11-17 20:38:20
显示代码纯文本
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<climits>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
#define SIZE 16777216
char inbuf[SIZE],*HEAD=inbuf,*TAIL=inbuf;
#define getc() (HEAD==TAIL&&(TAIL=(HEAD=inbuf)+fread(inbuf,1,SIZE,stdin),HEAD==TAIL)?0:*HEAD++)
__inline__ __attribute((always_inline))
void read(int& ret){
	register int ans=0;
	register char CH;
	while(CH=getc(),CH<48);
	while(ans=ans*10+CH-48,CH=getc(),CH>47);
	ret=ans;
}
__inline__ __attribute((always_inline))
void read(char *ch){
	register char CH;
	register int READITER=0;
	while(CH=getc(),CH<48);
	while(ch[READITER++]=CH,CH=getc(),CH>47);
	ch[READITER]=0;
}

char a[1000],b[1000];

int main(){
	freopen("madition.in","r",stdin);
	freopen("madition.out","w",stdout);
    register int n,len;

    read(n);read(a);read(b);
    int la=strlen(a),lb=strlen(b);
    for(register int i=0;i<la;i++)
        if(a[i]<97)a[i]-=48;
        else a[i]-=87;
    for(register int i=0;i<lb;i++)
        if(b[i]<97)b[i]-=48;
        else b[i]-=87;
    for(register int i=0,j=la-1;i<=j;i++,j--)
        swap(a[i],a[j]);
    for(register int i=0,j=lb-1;i<=j;i++,j--)
        swap(b[i],b[j]);
    if(la<lb){
        for(register int i=0;i<la;i++){
            a[i]+=b[i];
            if(a[i]>=n)a[i]-=n,a[i+1]++;
        }
        for(register int i=la;i<lb;i++){
            a[i]+=b[i];
            if(a[i]>=n)a[i]-=n,a[i+1]++;
        }
        if(a[lb])len=lb+1;
        else len=lb;
        for(register int i=0;i<len;i++)
            if(a[i]<10)a[i]+=48;
            else a[i]+=87;
    }else if(la>lb){
        for(register int i=0;i<lb;i++){
            a[i]+=b[i];
            if(a[i]>=n)a[i]-=n,a[i+1]++;
        }
        for(register int i=lb;i<la;i++){
            if(a[i]>=n)a[i]-=n,a[i+1]++;
        }
        if(a[la])len=la+1;
        else len=la;
        for(register int i=0;i<len;i++)
            if(a[i]<10)a[i]+=48;
            else a[i]+=87;
    }else{
        for(register int i=0;i<la;i++){
            a[i]+=b[i];
            if(a[i]>=n)a[i]-=n,a[i+1]++;
        }
        if(a[la])len=la+1;
        else len=la;
        for(register int i=0;i<len;i++)
            if(a[i]<10)a[i]+=48;
            else a[i]+=87;
    }
    for(register int i=0,j=len-1;i<=j;i++,j--)swap(a[i],a[j]);
    puts(a);

	return 0;
}