ZOJ 1205 二十进制相加

////////////////////////////////////////////////////////////////
//Martian Addition
//火星人(二十进制相加)
#include<iostream>
#include<string>
using namespace std;
char s1[105],s2[105];
char chu[105];

 

 

int main()
{
    int k1,k2;
    int a,b,c,i;
    while((cin>>s1>>s2)!=NULL)
    {
        k1=strlen(s1);
        k2=strlen(s2);
        c=0;
        while(k1>=1&&k2>=1)
        {    
            if(s1[k1-1]-'a'>=0)
                a=s1[k1-1]-'a'+10;                    
            else
                a=s1[k1-1]-'0';

            if(s2[k2-1]-'a'>=0)
                b=s2[k2-1]-'a'+10;
            else
                b=s2[k2-1]-'0';

            if(k1>k2)
            {
                if((a+b+c)%20>=10)
                    chu[k1]=(a+b+c)%20-10+'a';
                else
                    chu[k1]=(a+b+c)%20+'0';
            }
            else  
            {
                if((a+b+c)%20>=10)
                    chu[k2]=(a+b+c)%20-10+'a';
                else
                    chu[k2]=(a+b+c)%20+'0';
            }

            c=(a+c+b)/20;
            k1--;
            k2--;
        }

        if(k1>k2)
        {
            while(k1>=1)
            {    
                if(s1[k1-1]-'a'>=0)
                    a=s1[k1-1]-'a'+10;                    
                else
                    a=s1[k1-1]-'0';

                b=0;

                if((a+b+c)%20>=10)
                    chu[k1]=(a+b+c)%20-10+'a';
                else
                    chu[k1]=(a+b+c)%20+'0';    
                
                c=(a+c+b)/20;
                k1--;
            }
            chu[k1]=c+'0';
        }
        else
        {
            while(k2>=1)
            {    
                if(s2[k2-1]-'a'>=0)
                    a=s2[k2-1]-'a'+10;                    
                else
                    a=s2[k2-1]-'0';

                b=0;

                if((a+b+c)%20>=10)
                    chu[k2]=(a+b+c)%20-10+'a';
                else
                    chu[k2]=(a+b+c)%20+'0';    
                
                c=(a+c+b)/20;
                k2--;
            }
            chu[k2]=c+'0';
        }
        if(strlen(s1)>strlen(s2))
            for(i=k1;i<=strlen(s1);i++)
                if(i==0&&chu[i]=='0')
                    ;
                else
                    cout<<chu[i];
        else
            for(i=k2;i<=strlen(s2);i++)
                if(i==0&&chu[i]=='0')
                    ;
                else
                    cout<<chu[i];
        cout<<endl;
    }    
    return 0;
}

你可能感兴趣的:(十进制)