#include<stdio.h> #include<math.h> #include<string.h> #include<stdbool.h> int charTonum(char c){ return c-'0'; } char numTochar(int n){ return n+'0'; } int main(){ char a[500]="",b[500]=""; while(scanf("%s %s",a,b) != EOF){ char aint[500]="",adec[500]=""; char bint[500]="",bdec[500]=""; char rint[500]="",rdec[500]=""; int alen=strlen(a); int blen=strlen(b); int app=alen; int bpp=blen; int cflag=0; int i; int j; for(i = 0;i<alen;i++){ if (a[i] == '.') app = i; } for(i = 0;i<blen;i++){ if (b[i] == '.') bpp = i; } for(i=0;i<app;i++){ aint[i]=a[i]; } aint[i]='\0'; for(i=app+1;i<alen;i++){ adec[i-app-1]=a[i]; } adec[i-app-1]='\0'; for(i=0;i<bpp;i++){ bint[i]=b[i]; } bint[i]='\0'; for(i=bpp+1;i<blen;i++){ bdec[i-bpp-1]=b[i]; } bdec[i-bpp-1]='\0'; //printf("a:%s %s b:%s %s\n",aint,adec,bint,bdec); int ap=strlen(adec); int bp=strlen(bdec); if(ap>=bp){ rdec[ap]='\0'; for(i=ap-1;i>=0;i--){ if(ap==bp){ if(charTonum(adec[i])+charTonum(bdec[i])+cflag <= 9){ rdec[i]=numTochar(charTonum(adec[i])+charTonum(bdec[i])+cflag); cflag=0; ap--; bp--; } else if(charTonum(adec[i])+charTonum(bdec[i])+cflag > 9){ rdec[i]=numTochar(charTonum(adec[i])+charTonum(bdec[i])+cflag-10); cflag=1; ap--; bp--; } } else{ rdec[i]=adec[i]; ap--; } } } else{ rdec[bp]='\0'; for(i=bp-1;i>=0;i--){ if(bp==ap){ if(charTonum(adec[i])+charTonum(bdec[i])+cflag <= 9){ rdec[i]=numTochar(charTonum(adec[i])+charTonum(bdec[i])+cflag); cflag=0; ap--; bp--; } else if(charTonum(adec[i])+charTonum(bdec[i])+cflag > 9){ rdec[i]=numTochar(charTonum(adec[i])+charTonum(bdec[i])+cflag-10); cflag=1; ap--; bp--; } } else{ rdec[i]=bdec[i]; bp--; } } } ap=strlen(aint); bp=strlen(bint); if(ap>=bp){ rint[ap+1]='\0'; for(i=ap-1,j=bp-1;i>=0 && j>=0;){ if(charTonum(aint[i])+charTonum(bint[j])+cflag <= 9){ rint[i+1]=numTochar(charTonum(aint[i])+charTonum(bint[j])+cflag); cflag=0; i--; j--; } else if(charTonum(aint[i])+charTonum(bint[j])+cflag > 9){ rint[i+1]=numTochar(charTonum(aint[i])+charTonum(bint[j])+cflag-10); cflag=1; i--; j--; } } for(;i>=0;){ if(charTonum(aint[i])+cflag <= 9){ rint[i+1]=numTochar(charTonum(aint[i])+cflag); cflag=0; i--; } else if(charTonum(aint[i])+cflag > 9){ rint[i+1]=numTochar(charTonum(aint[i])+cflag-10); cflag=1; i--; } } if(cflag == 1){ rint[0]='1'; } else{ rint[0]='0'; } } else{ rint[bp+1]='\0'; for(i=ap-1,j=bp-1;i>=0 && j>=0;){ if(charTonum(aint[i])+charTonum(bint[j])+cflag <= 9){ rint[i+1]=numTochar(charTonum(aint[i])+charTonum(bint[j])+cflag); cflag=0; i--; j--; } else if(charTonum(aint[i])+charTonum(bint[j])+cflag > 9){ rint[i+1]=numTochar(charTonum(aint[i])+charTonum(bint[j])+cflag-10); cflag=1; i--; j--; } } for(;j>=0;){ if(charTonum(bint[j])+cflag <= 9){ rint[i+1]=numTochar(charTonum(bint[j])+cflag); cflag=0; j--; } else if(charTonum(bint[j])+cflag > 9){ rint[i+1]=numTochar(charTonum(bint[j])+cflag-10); cflag=1; j--; } } if(cflag == 1){ rint[0]='1'; } else{ rint[0]='0'; } } //printf("%s\n",rint); //printf("%s\n",rdec); bool flag0 = true; for(i=0;i<strlen(rint);i++){ if(rint[i]=='0' && flag0); else{ printf("%c",rint[i]); flag0=false; } } if(flag0) printf("0"); int lenDec=0; for(i=0;i<strlen(rdec);i++){ if(rdec[i] != '0') lenDec=i+1; } if(lenDec!=0) printf("."); for(i=0;i<lenDec;i++) printf("%c",rdec[i]); printf("\n"); } return 0; } |
Double click to view unformatted code.