【英雄会】二十进制数的加法

二十进制数的加法

题目详情:

在二十进制中,我们除了使用数字0-9以外,还使用字母a-j(表示10-19),给定两个二十进制整数,求它们的和。

输入是两个二十进制整数,且都大于0,不超过100位;

输出是它们的和(二十进制),且不包含首0。我们用字符串来表示二十进制整数。

答题说明:

main函数可不
using System;


public class Test 
{
    //进位标志  
        static bool flag = false;  
        public static string calculate(string x, string y)  
        {  
            string s = string.Empty;  
            int len = Math.Abs(x.Length - y.Length);  
            int length = x.Length >= y.Length ? y.Length : x.Length;  
            //加比较小的数的位数  
            for (int i = 0; i < length; i++)  
            {  
                //x的后面的数  
                string m = x[x.Length - i - 1].ToString();  
                string n = y[y.Length - i - 1].ToString();  
                char c = add(x[x.Length - i - 1], y[y.Length - i - 1]);  
                s += c.ToString();  
  
            }  
            //如果x的长度比较大  
            if (x.Length > y.Length)  
            {  
               
                for (int i = len-1; i >=0; i--)  
                {  
                    s += add(x[i], '0');    
                }  
            }  
            else if (x.Length < y.Length)   
            {  
                for (int i = len-1; i >= 0; i--)  
                {                   
                     s += add(y[i],'0');    
                }  
            }  
            if (flag == true)  
            {  
                s += "1";  
            }  
            return Rervese(s);  
        }  
        public static char add(char x, char y)  
        {  
            int m = -1;  
            int n = -1;  
            if (char.IsNumber(x))  
            {  
                m = int.Parse(x.ToString());  
            }  
            else  
            {  
                x = Convert.ToChar(x.ToString().ToLower());  
                m = x - 87;  
            }  
            if (char.IsNumber(y))  
            {  
                n = int.Parse(y.ToString());  
            }  
  
            else  
            {  
                y = Convert.ToChar(y.ToString().ToLower());  
                n = y - 87;  
            }  
            //k为综合  
            int k = -1;  
            if (flag == true)  
            {  
                k = m + n + 1;  
                flag = false;  
            }  
            else  
            {  
                k = m + n;  
            }  
            //把进位标志设成true  
            if (k / 20 == 1)  
            {  
                flag = true;  
                k = k - 20;  
            }  
            if (k < 10)  
            {  
                return Convert.ToChar(k.ToString());  
            }  
            return (char)(87 + k);  
  
  
        }  
        public static string Rervese(string s)  
        {  
              
            char[] ch = s.ToCharArray();  
            for (int i = 0; i < ch.Length/2; i++)  
            {  
                char c = ch[i];  
                ch[i] = ch[ch.Length - i-1];  
                ch[ch.Length - i-1] = c;  
            }  
            return String.Join("",ch);  
        }  
        //start 提示:自动阅卷起始唯一标识,请勿删除或增加。   
        public static void Main()  
        {  
            Console.WriteLine(calculate("9c", "de5h"));  
            
                
            Console.WriteLine(calculate("Test", "Test"));  
        }  
    
    //end //提示:自动阅卷结束唯一标识,请勿删除或增加。    
}

用完成。

算法实现:
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值