Method 1
Thanks to Raj for suggesting this method.

  1. Convert both i/p base 14 numbers to base 10.
  2. Add numbers.
  3. Convert the result back to base 14.

Method 2
Just add the numbers in base 14 in same way we add in base 10. Add numerals of both numbers one by one from right to left. If there is a carry while adding two numerals, consider the carry for adding next numerals.

Let us consider the presentation of base 14 numbers same as hexadecimal numbers

   A --> 10
   B --> 11
   C --> 12
   D --> 13
Example:
   num1 =       1  2  A
   num2 =       C  D  3   

   1. Add A and 3, we get 13(D). Since 13 is smaller than 
14, carry becomes 0 and resultant numeral becomes D         

  2. Add 2, D and carry(0). we get 15. Since 15 is greater 
than 13, carry becomes 1 and resultant numeral is 15 - 14 = 1

  3. Add 1, C and carry(1). we get 14. Since 14 is greater 
than 13, carry becomes 1 and resultant numeral is 14 - 14 = 0

Finally, there is a carry, so 1 is added as leftmost numeral and the result becomes 
101D
[ad type=”banner”]

Implementation of Method 2:

[pastacode lang=”c” manual=”%23%20include%20%3Cstdio.h%3E%0A%23%20include%20%3Cstdlib.h%3E%0A%23%20define%20bool%20int%0A%20%0Aint%20getNumeralValue(char%20)%3B%0Achar%20getNumeral(int%20)%3B%0A%20%0A%2F*%20Function%20to%20add%20two%20numbers%20in%20base%2014%20*%2F%0Achar%20*sumBase14(char%20*num1%2C%20%20char%20*num2)%0A%7B%0A%20%20%20int%20l1%20%3D%20strlen(num1)%3B%0A%20%20%20int%20l2%20%3D%20strlen(num2)%3B%20%20%0A%20%20%20char%20*res%3B%20%0A%20%20%20int%20i%3B%0A%20%20%20int%20nml1%2C%20nml2%2C%20res_nml%3B%20%20%20%0A%20%20%20bool%20carry%20%3D%200%3B%0A%20%20%20%20%0A%20%20%20if(l1%20!%3D%20l2)%0A%20%20%20%7B%0A%20%20%20%20%20printf(%22Function%20doesn’t%20support%20numbers%20of%20different%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%20lengths.%20If%20you%20want%20to%20add%20such%20numbers%20then%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%20prefix%20smaller%20number%20with%20required%20no.%20of%20zeroes%22)%3B%20%0A%20%20%20%20%20getchar()%3B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20assert(0)%3B%0A%20%20%20%7D%20%20%20%20%20%20%0A%20%0A%20%20%20%2F*%20Note%20the%20size%20of%20the%20allocated%20memory%20is%20one%20%0A%20%20%20%20%20more%20than%20i%2Fp%20lenghts%20for%20the%20cases%20where%20we%20%0A%20%20%20%20%20have%20carry%20at%20the%20last%20like%20adding%20D1%20and%20A1%20*%2F%20%20%0A%20%20%20res%20%3D%20(char%20*)malloc(sizeof(char)*(l1%20%2B%201))%3B%0A%20%20%20%20%20%20%20%0A%20%20%20%2F*%20Add%20all%20numerals%20from%20right%20to%20left%20*%2F%0A%20%20%20for(i%20%3D%20l1-1%3B%20i%20%3E%3D%200%3B%20i–)%0A%20%20%20%7B%0A%20%20%20%20%20%2F*%20Get%20decimal%20values%20of%20the%20numerals%20of%20%0A%20%20%20%20%20%20%20i%2Fp%20numbers*%2F%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20nml1%20%3D%20getNumeralValue(num1%5Bi%5D)%3B%0A%20%20%20%20%20nml2%20%3D%20getNumeralValue(num2%5Bi%5D)%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%2F*%20Add%20decimal%20values%20of%20numerals%20and%20carry%20*%2F%0A%20%20%20%20%20res_nml%20%3D%20carry%20%2B%20nml1%20%2B%20nml2%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%2F*%20Check%20if%20we%20have%20carry%20for%20next%20addition%20%0A%20%20%20%20%20%20%20%20of%20numerals%20*%2F%0A%20%20%20%20%20if(res_nml%20%3E%3D%2014)%0A%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20carry%20%3D%201%3B%0A%20%20%20%20%20%20%20res_nml%20-%3D%2014%3B%0A%20%20%20%20%20%7D%20%20%20%0A%20%20%20%20%20else%0A%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20carry%20%3D%200%3B%20%20%20%20%20%0A%20%20%20%20%20%7D%20%20%20%20%20%20%20%0A%20%20%20%20%20res%5Bi%2B1%5D%20%3D%20getNumeral(res_nml)%3B%0A%20%20%20%7D%0A%20%20%20%20%20%20%20%0A%20%20%20%2F*%20if%20there%20is%20no%20carry%20after%20last%20iteration%20%0A%20%20%20%20%20%20then%20result%20should%20not%20include%200th%20character%20%0A%20%20%20%20%20%20of%20the%20resultant%20string%20*%2F%0A%20%20%20if(carry%20%3D%3D%200)%0A%20%20%20%20%20return%20(res%20%2B%201)%3B%20%20%20%0A%20%0A%20%20%20%2F*%20if%20we%20have%20carry%20after%20last%20iteration%20then%20%0A%20%20%20%20%20result%20should%20include%200th%20character%20*%2F%0A%20%20%20res%5B0%5D%20%3D%20’1’%3B%0A%20%20%20return%20res%3B%0A%7D%0A%20%0A%2F*%20Function%20to%20get%20value%20of%20a%20numeral%20%0A%20%20For%20example%20it%20returns%2010%20for%20input%20’A’%20%0A%20%201%20for%20’1’%2C%20etc%20*%2F%0Aint%20getNumeralValue(char%20num)%0A%7B%0A%20%20if(%20num%20%3E%3D%20’0’%20%26%26%20num%20%3C%3D%20’9′)%0A%20%20%20%20return%20(num%20-%20’0′)%3B%0A%20%20if(%20num%20%3E%3D%20’A’%20%26%26%20num%20%3C%3D%20’D’)%20%20%0A%20%20%20%20return%20(num%20-%20’A’%20%2B%2010)%3B%0A%20%20%20%20%20%20%20%20%20%0A%20%20%2F*%20If%20we%20reach%20this%20line%20caller%20is%20giving%20%0A%20%20%20%20invalid%20character%20so%20we%20assert%20and%20fail*%2F%20%0A%20%20assert(0)%3B%0A%7D%0A%20%0A%2F*%20Function%20to%20get%20numeral%20for%20a%20value.%20%20%20%0A%20%20For%20example%20it%20returns%20’A’%20for%20input%2010%20%0A%20%20’1’%20for%201%2C%20etc%20*%2F%0Achar%20getNumeral(int%20val)%0A%7B%0A%20%20if(%20val%20%3E%3D%200%20%26%26%20val%20%3C%3D%209)%0A%20%20%20%20return%20(val%20%2B%20’0′)%3B%0A%20%20if(%20val%20%3E%3D%2010%20%26%26%20val%20%3C%3D%2014)%20%20%0A%20%20%20%20return%20(val%20%2B%20’A’%20-%2010)%3B%0A%20%20%20%20%20%0A%20%20%2F*%20If%20we%20reach%20this%20line%20caller%20is%20giving%20%0A%20%20%20%20invalid%20no.%20so%20we%20assert%20and%20fail*%2F%20%20%20%20%20%0A%20%20assert(0)%3B%0A%7D%0A%20%0A%2F*Driver%20program%20to%20test%20above%20functions*%2F%0Aint%20main()%0A%7B%0A%20%20%20%20char%20*num1%20%3D%20%22DC2%22%3B%0A%20%20%20%20char%20*num2%20%3D%20%220A3%22%3B%0A%20%0A%20%20%20%20printf(%22Result%20is%20%25s%22%2C%20sumBase14(num1%2C%20num2))%3B%20%20%20%20%20%0A%20%20%20%20getchar()%3B%0A%20%20%20%20return%200%3B%0A%7D” message=”C” highlight=”” provider=”manual”/]