题目描述:在二十进制中,我们除了使用数字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"));
}
}
}