从知道和听说PAT考试到现在已经很久了,但最近才真正下定决心考这个东西。早些时候也陆陆续续刷过官网上的真题,但都是抱着好玩的心态去换一下脑子。最近两个星期才开始高密度的杀题,也正是这样让我重拾C语言和C++。自从学了Python之后,我的惰性展现的愈发明显,能用Python的决定不用C和C++,这似乎成了我的人生信条。起初也是一直用Python,但PAT的OJ是真的严格,好几次AC不过。
不过我发现基本上第一道15分的题用Python解决起来真的很方便,当然在使用Python之前也要考查一下时间复杂度。
对于基础比较薄弱的建议可以先看一下大神漫浸天空的雨色写的Codeup《算法笔记》的解析+代码~~传送门:codeup《算法笔记》题目索引(题目+解析+代码)
然后自己总结一下这几天发现的难点问题:
1)大数的输入输出及其运算
谈到大数,到底什么叫大数,多大的数才能称之为大数呢?
我们都知道int类型的数据他的范围在
−
2
31
∼
2
31
−
1
-2^{31}\sim2^{31}-1
−231∼231−1也就是在
−
2147483648
∼
2147483647
-2147483648\sim2147483647
−2147483648∼2147483647之间,那么超过这个范围了我们应该怎么办呢?很显然需要用到long long类型,他的范围在
−
2
63
∼
2
63
−
1
-2^{63}\sim2^{63}-1
−263∼263−1也就是在
−
9223372036854775808
∼
9223372036854775807
-9223372036854775808\sim9223372036854775807
−9223372036854775808∼9223372036854775807之间,然而有些时候这样的范围还是不够,这个时候,如果没有负数的情况的话,我们可以考虑一个无符号长整数类型——unsigned long long。他的范围在
0
∼
18446744073709551615
0\sim18446744073709551615
0∼18446744073709551615。如果最后数还是很大的话,那就考虑用字符串来接收和处理数据,他的四则运算根据我们熟知的四则运算法则边处理边输出。这个过程就涉及到数字字符转数字、数字字符串转数字,数字转字符串等问题,这些问题都有专门的函数替我们解决,最主要的还是如何实现四则运算的问题。这样就不用涉及大数的运算从而导致溢出。如果非要存储的话用字符串来存。
2)字符串的处理
需求 | 方法 |
---|---|
求字符串的长度 | strlen(m) m.length() m.size() |
字符串复制 | strcpy(a,b)//将b复制到a中 |
分离数字的每一位 | 如果数字不定长,需要计算数字有多少位,然后分别对前一位的数量级取余再对自己的位取商。 第二种办法:用字符串接收,然后遍历字符串,分别将遍历得到的字符使用 字符-‘0’ 的方式获得单个数字 |
数字字符串转化为整形数字 | 调用<stdlib.h>中的atoi()函数。语法为:int a=atoi(“str”); |
整型数字转化为字符数组 | 调用<stdlib.h>中的itoa()函数。语法为:int n;char[len] a=atoi(n,a,10);//最后的10是以什么进制转化 |
英文字符串大小写转换 | 可以将每个字符分别±32 使用函数:调用头文件<cctype>中的toupper——转大写;tolower——转小写 |