PAT乙级系列:第二题
来源:互联网 发布:c语言源码网站 编辑:程序博客网 时间:2024/05/29 18:55
题目如下
第一步:输入
因为n小于10的100次方,所以可以用长度为100的字符型数组保存。这里仍然要讨论结束符的问题。如果输入长度为100,那么编译器会不会自动再数组结尾插入一个结束符?如果使用cin>>,是不会出现这种情况的。这里做了一个小尝试。
#include<iostream>using namespace std;int main(){ char a[3]; cin>>a; cout<<a;}
输入长度为3的字符串,输出也为长度为3的字符串。
第二部:计算总和
2.1求输入字符串的位数。
int getInputLen(const char (&a)[100]){ int len=0; for (int i =0;i<100;i++) { if (a[i]!=NULL) { len++; } } return (len);}
什么是NULL,为什么在数组中没有赋值的地址上的值为NULL?
c++中定义NULL即为0.在数组中,无论什么类型的数组,如果元素没有被初始化,就会被设定为默认值‘0’。int型将会初始化为0.char或者string型数组将会初始化为“”(ASCII码为0)。所以,上述判定条件也可以写成: if (a[i]!=0).
虽然这里不涉及空指针问题,但是我也查了一点这方面的资料。空指针不会指向任何对象和函数。所以任何对象或者函数的地址均不为空。那么空指针到底指向什么地方呢?答案是,看系统而定。有的是指向地址为0的内存。有的是指向其他的位置。
参考资料:
初始化问题
空指针问题
2.2 求和
int getSum(const char (&a)[100]){ int len = getInputLen(a); int sum=0; for (int i =0;i<len;i++) { sum = sum + (int)a[i]-48; } return (sum);}
这里注意格式转换就行
第三部 输出
3.1 定义string数组。
用含有10个元素的string数组来存储拼音信息。之所以用const,是因为希望保护string内的元素,不允许修改。
const string pinYin[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
3.2 打印
这里我思考了一段时间,如何保证从非零首位开始打印。我想的办法是从高位开始遍历,设置一个标志位,当标志位为1时,才能够打印。而只有出现非零值时,标志位才会改变为1.还有就是如何将int型值的每一位依次取出。算法如下
void output(const string (&pinYin)[10], int sum){ int a[3]={-1,-1,-1}; int flag=0; for ( int i =3;i>0;i--) { int b = sum % (int)pow(10,i); a[i-1]=b /(int)pow(10,i-1) ; if (a[i-1]!=0) { flag=1; } if(flag==1) { cout<<pinYin[a[i-1]]; } if (i!=1 & flag==1) { cout<<' '; } }}
综合代码:
#include<iostream>#include<string>#include"math.h"using namespace std;void getInput(char (&a) [100]){ cin>>a;}int getInputLen(const char (&a)[100]){ int len=0; for (int i =0;i<100;i++) { if (a[i]!=0) { len++; } } return (len);}int getSum(const char (&a)[100]){ int len = getInputLen(a); int sum=0; for (int i =0;i<len;i++) { sum = sum + (int)a[i]-48; } return (sum);}void output(const string (&pinYin)[10], int sum){ int a[3]={-1,-1,-1}; int flag=0; for ( int i =3;i>0;i--) { int b = sum % (int)pow(10,i); a[i-1]=b /(int)pow(10,i-1) ; if (a[i-1]!=0) { flag=1; } if(flag==1) { cout<<pinYin[a[i-1]]; } if (i!=1 & flag==1) { cout<<' '; } }}int main(){ const string pinYin[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; char input[100]={'0'}; int sum=0; getInput(input); sum = getSum(input); output(pinYin,sum); return(0);}
阅读全文
0 0
- PAT乙级系列:第二题
- PAT乙级系列:第一题
- PAT乙级真题
- pat乙级:第三题
- PAT乙级1006题感想
- PAT乙级训练题--1001
- PAT乙级训练题--1002
- PAT乙级训练题--1003
- PAT乙级训练题--1007
- PAT乙级训练题--1008
- PAT乙级训练题--1009
- PAT乙级训练题--1010
- PAT乙级1061 判断题
- PAT乙级题-德才论
- [PAT-乙级]1061.判断题
- pat乙级1010题笔记
- PAT乙级题1004.成绩排名
- PAT乙级题1020.月饼
- Mysql数据库入门
- 第九周收获
- 实验测试2《C++ Primer》第五版——第八章 IO类
- mysql 触发器after与before的区别
- 内核对象介绍
- PAT乙级系列:第二题
- indexFor方法分析
- Bookshelf
- Fragment切换和隐藏,显示(show,hide)
- tomcat环境配置
- 运行时栈帧结构
- Retrofit+RxJava+Fresco简单实现数据展示
- java学习(十二)—并发编程(一)
- Mac 重置mysql数据库密码