C++ PAT 乙级 ——1002 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

C++ PAT 乙级 ——1002 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

题目分析

(1)由于自然数n的范围要求小于10^100,unsigned 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

#include<iostream>using 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;
}

初学者,不足之处多多包涵~~(^^)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言中的二进制、八进制和十六进制的表示

二进制数、八进制数和十六进制数的表示 一个数字默认就是十进制的&#xff0c;表示一个十进制数字不需要任何特殊的格式。但是&#xff0c;表示一个二进制、八进制或者十六进制数字就不一样了&#xff0c;为了和十进制数字区分开来&#xff0c;必须采用某种特殊的写法&#xf…

没有bug队——加贝——Python 41,42

41.题目&#xff1a;模仿静态变量的用法。 python中是不支持静态变量的&#xff0c;所以可以通过以下的方法来实现静态变量的功能&#xff1a; 代码1&#xff1a; class CTest(object):#python静态变量实现方法i__initNonedef __new__(cls,value):if cls.i__init is None:cl…

C语言中的正负数及其输出

在数学中&#xff0c;数字有正负之分。在C语言中也是一样&#xff0c;short、int、long 都可以带上正负号&#xff0c;示例 //负数 short a1 -10; short a2 -0x2dc9; //十六进制 //正数 int b1 10; int b2 0174; //八进制 int b3 22910; //负数和正数相加 long c (-9)…

C++ PAT 乙级 ——1003 我要通过

题目详情 答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件&#xff0c;系统就输出“答案正确”&#xff0c;否则输出“答案错误”。 得到“答案正确”的条件是&#xff1a; 字符串中必须仅有 P、 A、…

C语言中的小数

小数分为整数部分和小数部分&#xff0c;它们由点号.分隔&#xff0c;例如 0.0、78.0、4.023、0.27、-927.148 -0.57 等都是合法的小数&#xff0c;这是最常见的小数形式&#xff0c;我们将它称为十进制形式。 此外&#xff0c;小数也可以采用指数形式&#xff0c;例如 7.2510…

没有bug队——加贝——Python 43,44

目录 43.题目&#xff1a;模仿静态变量(static)另一案例。 44 - Python 两个矩阵相加 43.题目&#xff1a;模仿静态变量(static)另一案例。 程序分析&#xff1a;演示一个python作用域使用方法 #43 class Num:nNum 1def inc(self):self.nNum 1print (nNum %d % self.nN…

数学建模学习笔记(一)——层次分析模型

1.模型简介 层次分析模型主要应用于综合评价类问题&#xff0c;例如&#xff1a;怎样购买最划算、怎样养殖才能获得最大经济效益等等。 2.下面使用一道例题来说明这个问题 问题&#xff1a;你想要购置一台个人电脑&#xff0c;考虑价格、性能等因素&#xff0c;如何做出决策…

C语言英文字符的使用

字符的表示 字符类型由单引号’ 包围&#xff0c;字符串由双引号" "包围。 下面的例子演示了如何给 char 类型的变量赋值&#xff1a; //正确的写法 char a 1; char b $; char c X; char d ; // 空格也是一个字符//错误的写法 char x 中; //char 类型不能…

没有bug队——加贝——Python 45,46

目录 45.题目&#xff1a;统计 1 到 100 之和。 46.题目&#xff1a;求输入数字的平方&#xff0c;如果平方运算后小于 50 则退出。 实现1 实现2 Python While 循环语句 跳过循环 无限循环 循环使用 else 语句 45.题目&#xff1a;统计 1 到 100 之和。 #45 tmp 0 for…

没有bug队——加贝——Python 47,48

目录 47.题目&#xff1a;两个变量值互换。 实现1 实现2 48.题目&#xff1a;数字比较。 47.题目&#xff1a;两个变量值互换。 实现1 a 10 b 20 print(x ,a ,y ,b) a,b b,a print(x ,a ,y ,b) 输出&#xff1a; 实现2 #47 def exchange(a,b):a,b b,areturn (a,…

Latex笔记(一)—— 复杂表格的制作

引言 表格是论文写作中的重要一环&#xff0c;尤其是较为复杂的三线表的制作。 在网上寻找了很久发现没有比较综合的解释方法&#xff0c;因此将查阅的关于复杂三线表的制作的资料总结成了一篇笔记。 由于笔记是用Latex写作的&#xff0c;因此这里只放上Latex生成的pdf的截图&…

C语言转义字符的使用

字符集&#xff08;Character Set&#xff09;为每个字符分配了唯一的编号&#xff0c;我们不妨将它称为编码值。在C语言中&#xff0c;一个字符除了可以用它的实体&#xff08;也就是真正的字符&#xff09;表示&#xff0c;还可以用编码值表示。这种使用编码值来间接地表示字…

数学建模学习笔记(二)——Topsis优劣解距离法

&#xff08;续上篇文章&#xff09;层次分析法的局限 上一篇文章中&#xff0c;层次分析法有这样的局限 评价决策层不能太多&#xff1b;数据是已知的的话&#xff0c;便无法使用层次分析法进行精确的分析评价&#xff1b; 因此&#xff0c;为对这些情况做出更为精准的分析…

没有bug队——加贝——Python 49,50

49.题目&#xff1a;使用lambda来创建匿名函数。 lambda函数 紧跟的是定义的自变量&#xff0c;因变量等&#xff0c;其后是函数 MAXIMUM lambda x,y : (x > y) * x (x < y) * y MINIMUM lambda x,y : (x > y) * y (x < y) * xif __name__ __main__:a 10…

没有bug队——加贝——Python 51,52

目录 知识点&#xff1a; 51.题目&#xff1a;学习使用按位与 & 。 52.题目&#xff1a;学习使用按位或 | 。 知识点&#xff1a; 运算符描述实例&按位与运算符&#xff1a;参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0(a & b) 输出结果 12 …

数学建模学习笔记(三)——插值算法

插值算法简介 数据分析是在大数据时代下不可获取的一环&#xff0c;合理、全面地分析数据&#xff0c;能够使得决策者在决策时作出最为明智的决定。在数据分析过程中&#xff0c;常常可以使用插值算法来根据已知的数据估算出未知的数据&#xff0c;从而模拟产生一些新的值来满…

C语言自增和自减

一个整数类型的变量自身加 1 可以这样写&#xff1a; a a 1;或者 a 1;不过&#xff0c;C语言还支持另外一种更加简洁的写法&#xff0c;就是&#xff1a; a;或者 a;这种写法叫做自加或自增&#xff0c;意思很明确&#xff0c;就是每次自身加 1。 相应的&#xff0c;也有…

没有bug队——加贝——Python 53,54

目录 53.题目&#xff1a;学习使用按位异或 ^ 。 54.题目&#xff1a;取一个整数a从右端开始的4〜7位。 运算符描述实例&按位与运算符&#xff1a;参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0(a & b) 输出结果 12 &#xff0c;二进制解释&#xf…

数学建模学习笔记(四)——拟合算法

文章目录拟合算法简介一个线性规划的例子最小二乘法求解最小二乘法拟合检验总结拟合算法简介 与插值算法不同&#xff0c;拟合算法的目的是得到一条确定的曲线&#xff1b;而插值是根据已有的数据来获得一系列新的“靠谱”的数据。插值要求曲线必须全部经过样本数据点&#xf…

C语言运算符的优先级及结合性

C语言运算符的优先级我们结合实例了解会更加简单易懂。 示例程序 #include <stdio.h> int main(){int a 16, b 4, c 2;int d a b * c;int e a / b * c;printf( "d%d, e%d\n", d, e);return 0; }运行结果&#xff1a; d24, e81 . 对于表达式a b * c&a…