1.题目描述
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。输入样例: 1234567890987654321123456789
输出样例: yi san wu
2.思路解析
- 首先用户键入的整数会以字符串的形式保存;
- 遍历字符串,让各个位置上的元素相加,此处注意用下标访问字符串元素返回值为char,所以相加时要让元素先减去 ‘0’,最后将得到的结果转为string类型;
- 将“ling”~“jiu“保存到一维数组中,结果字符串中的各元素,即为其汉语拼音在数组中的下标。
3.代码
public static string WriteNum1(string str)
{
string s = "";
int sum = 0;
// 求出各位之和
for (int i = 0; i < str.Length; i++)
{
sum += (str[i] - '0');
}
string[] PinYin = { "ling", "yi","er","san","si","wu","liu","qi","ba","jiu" };
#region 方法1:求出每一位数字
// list集合用于存放和的每一位数字
//List<int> list = new List<int>();
//while (sum != 0)
//{
// list.Add(sum % 10);
// sum /= 10;
//}
//for (int i = list.Count -1 ; i > 0 ; i--)
//{
// s += PinYin[list[i]]+" ";
//}
//s += PinYin[list[0]];
#endregion
#region 方法2:将和直接转为字符串,遍历各个元素
str = sum.ToString();
for (int i = 0; i < str.Length - 1; i++)
{
s += PinYin[str[i] - '0'] + " ";
}
s += PinYin[str[str.Length - 1] - '0'];
#endregion
return s;
}
4. 总结
对于求一个整数的各个位置上数字的两种思路:
- 用%/来求,将结果保存在数组中;
- 也可以直接将其转换成字符串,字符串相当于一个只读char数组,又因为char和int可以隐式转换,所以用字符串数组中的元素减去‘0’即为其元素值
对于与整数存在一一对应的关系,可以将其用数组存储起来利用下标进行访问;也可以采用流程控制语句进行判断。