View Code of Problem 132

#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.


Back to problem 132