还记得大一时练习ACM算法的时光,那时候解题用的是c和c++,最近想练练编程算法,但是c和c++好久没用了,很多地方生疏了。鉴于此,我准备用C#来写写代码。
进制转换
第一行:A进制和B进制(2<=A,B<=30)
第二行:A进制的数值num
要 求 :将A进制的num转为B进制数输出
代码:
//输入A和B进制和数值
string AtoB = Console.ReadLine();
string num = Console.ReadLine();
//得到A、B进制和数值
string[] atob = AtoB.Split(' ');
int A = Convert.ToInt32(atob[0]);
int B = Convert.ToInt32(atob[1]);
char[] c = num.ToArray();
//将A进制转为10进制
int x = 0;
double sum = 0;
for(int i=c.Length -1;i>=0;i--, x++)
{
if (c[i] >= 'A')
{
sum += (c[i] - 'A' + 10) * Math.Pow(A, x);
}
else
{
sum += (c[i] - '0') * Math.Pow(A, x);
}
}
//将10进制转为B进制
int temp = (int)sum;
List<double> result = new List<double>();
while(temp!=0)
{
result.Add(temp % B);
temp /= B;
}
result.Reverse();
foreach (double item in result)
{
Console.Write(item);
}
Console.WriteLine();
//Console.ReadKey();
字符串匹配
第一行:输入字符串a
第二行:输入字符串b
要 求 :输出a中b的个数,以及b在a中的起始下标
例:
输入:
abcdabcacabce
abc
输出:
count:3
indexs:0 4 9
//字符串匹配找KMP
int[] Next(string T)
{
int [] next=new int[T.Length];
int k=-1;
int j=0