今天碰到一道题,写一个方法,传进去一个整数,输出int[]型的数组来包含这个整数中的各个数字,如12345输出为int[5]{1,2,3,4,5}的数组。首先想到的当然是把这个整数转换为字符串,然后用ToArray什么的方法把其转换为string[]数组,再把这个数组存到int[]数组里,但题目恰恰要求不能用这样的方法来实现,于是冥思苦想。。。想到可以用取模得余数的方法来一个个获取数字
Code
//方法一:通过取模得余数的方法(自己的方法)
private int[] GetIntArray_(int num)
{
int len = num.ToString().Length;
int[] arr = new int[len];
for (int i = 0; i < len; i++)
{
arr[i] = (int)((num % Math.Pow(10, i + 1) - num % Math.Pow(10, i)) / Math.Pow(10, i));
}
Array.Reverse(arr);
return arr;
}
用了很多的Math.Pow,主考官说写复杂了,可以稍微简化一点,于是告诉我
Code
//方法二:通过取模得余数的方法(别人的方法)
private int[] GetIntArray__(int num)
{
int len = num.ToString().Length;
int[] arr = new int[len];
for (int i = 0; i < len; i++)
{
arr[i] = num % 10;
num /= 10;
}
Array.Reverse(arr);
return arr;
}
其实是一样的思路,只不过他除了用到取模得数外,还用除法把剩下部分弄出来了
附上使用字符串数组的方法:
Code
//方法三:转换为字符串数组然后存到整数数组里
private int[] GetIntArray(int num)
{
char[] strArr = num.ToString().ToCharArray();
int[] intArr = Array.ConvertAll<char, int>(strArr, delegate(char c) { return int.Parse(c.ToString()); });
return intArr;
}
这里用到了Array.ConvertAll把char[]转换为int[],当然也可以迭代一下,一个个转换
再附上一个遍历数组的方法,用到了泛型
Code
//遍历数组
private string ShowArray<T>(T[] arr)
{
StringBuilder strBdr = new StringBuilder();
foreach (T t in arr)
{
strBdr.Append(t.ToString());
strBdr.Append("\r\n");
}
return strBdr.ToString();
}
和演示调用代码
Code
//*数组转换演示
//char[] c = new char[] { 'a', 'b', 'C', 'd', 'E' };
//textBox1.Text += ShowArray<char>(c);
textBox1.Text += ShowArray<int>(GetIntArray(12345));
textBox1.Text += ShowArray<int>(GetIntArray_(12345));
textBox1.Text += ShowArray<int>(GetIntArray__(12345));
//*/