做网站维护工作难吗,静态网站,wordpress 迁移 404,wordpress 用户量上限C PAT 乙级 ——1002 读入一个正整数 n#xff0c;计算其各位数字之和#xff0c;用汉语拼音写出和的每一位数字。
题目分析
#xff08;1#xff09;由于自然数n的范围要求小于10^100#xff0c;unsigned long long不满足要求#xff0c;采用int型数组也难以输入…C PAT 乙级 ——1002 读入一个正整数 n计算其各位数字之和用汉语拼音写出和的每一位数字。
题目分析
1由于自然数n的范围要求小于10^100unsigned long long不满足要求采用int型数组也难以输入所以想到了运用char型数组输入字符串然后将每个字符减去0的ASCII码来获得对应数字。 char a[101];int index[100];cin a;int i 0;while (a[i] ! \0){index[i] a[i] - 0;i; //转换为相应的数字并用i来记录位数}2由于有i来记录位数因此将0 ~ i-1的各位数字相加即可注意index[i] 0 int sum 0;for (int j 0; j i; j){sum index[j];} 3为了获取每一位上的数字可以用除以10取余的方法然后将每位数字存储到一个数组中此时数组中的元素是倒序的例如135在数组中为5310. int figure[4] { 0 };int k 0;while (sum ! 0){figure[k] sum % 10;sum / 10;k;}关于figure[4]的说明n不超过10^100那么n的每个位置上的数字的和最大即为99个9相加 891也是不超过3位的但是此时后面还会循环一次0因此使用figure数组的大小为4即可。
4关于“yi”、“er”……怎么表示的问题采用一种比较灵活的数字与字符之间的转换表示法即用const char* p[];来存储字符然后其索引用数字来表达需要表达的字符.
关于输出的说明我具体考虑了三种情况 1.输入就是0的情况 2.一般情况
注意审题最后一个输出的字符后面是不带空格的卡了我好久好久/(ㄒoㄒ)/~~因此最后一位要单独输出 const char* pinyin[10] { ling, yi, er, san, si, wu, liu, qi, ba, jiu };int o 0;if (k 0 figure[k] 0) //输入就是0的情况cout pinyin[0];else //一般情况{for (o k - 1; o 0; --o){if (o ! 0)cout pinyin[figure[o]] ;elsecout pinyin[figure[o]];}}Final Code
#includeiostreamusing namespace std;int main()
{char a[101];int index[100];cin a;int i 0;while (a[i] ! \0){index[i] a[i] - 0;i;}int sum 0;for (int j 0; j i; j){sum index[j];}const char* pinyin[10] { ling, yi, er, san, si, wu, liu, qi, ba, jiu };int figure[3] { 0 };int k 0;while (sum ! 0){figure[k] sum % 10;sum / 10;k;}int o 0;if (k 0 figure[k] 0)cout pinyin[0];else{for (o k - 1; o 0; --o){if (o ! 0)cout pinyin[figure[o]] ;elsecout pinyin[figure[o]];}}return 0;
}初学者不足之处多多包涵~~(^–^)