PTA ”写出这个数“
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10的100次方。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp5 { class Program { int Main(string[] args) { //定义一个较大的数组接受输入的数字 Char[] ch = new char[100]; string str; int sum = 0; //定义一个数组用来存放输入数字各位相加后的数字的各个位的数字 int[] sum0 = new int[999]; int i = 0; //a后面用来记录 i的值 int a = 0; //接受输入的数字并转化为数组存入ch[]中 str = Console.ReadLine(); ch = str.ToCharArray(); //将对应的拼音存入string类型数组中 string[] str1 = new string[10] {"yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu", "shi"}; //输入字符串末尾自动会添加一个'\0',所以以此作为判断结束的标志 for (i = 0; str[i] != '\0'; i++) { sum += str[i] - '0'; //不加上这一步最后一次循坏后i+1然后进入判定str[i]索引越界 //所有在最后一部的时候提前break不让i再加1 if (i == str.Length - 1) { break; } } //将i初始化 i = 0; //将输入数字各位加起来的数字再求其各个位的数字 //注意这是倒序存放在sum0[]数组中 while (sum != 0) { sum0[i] = sum % 10; sum = sum / 10; i++; } //最后一步操作i自增1,数组中从下标0开始,所有i要减去1 //比如一个sum是123,有3个位,i为3也就是3次循环但是数组0,1,2就够了 i--; //记录i的值在下面从i开始输出,因为在sum数组中是倒序记录的 a = i; for (int j = 0; j <= a; j++, i--) { //str1数组下标从0开始所以(sum0[i]) - 1] Console.Write(str1[(sum0[i]) - 1]); //最后一个数不带" " if (j != a) { Console.Write(" "); } } return 0; } } }