二十进制数的加法

题目描述:在二十进制中,我们除了使用数字0-9以外,还使用字母a-j(表示10-19),给定两个二十进制整数,求它们的和。 输入是两个二十进制整数,且都大于0,不超过100位; 输出是它们的和(二十进制),且不包含首0。我们用字符串来表示二十进制整数。

分析:和大整数运算思路类似逐位相加既可

 

源码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 二十进制
{
    class Program
    {
        //进位标志
        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('a'-86);
            Console.Read();
            Console.WriteLine(calculate("Test", "Test"));
        }
    }
}


 

如果你拿我的答案去提交就没了任何意义,你可以参考我的思路然后自己完成。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值