(1)内存存储
1PB = 1024TB = 1024 * 1024GB
1GB = 1024MB =1024 * 1024KB = 1024 * 1024 * 1024B,1B = 8bit
(2)ASCII
大写字母 A - Z 的 ASCII 码:
大写字母 A 的 ASCII 码是 65。从 A 开始,往后每个大写字母的 ASCII 码依次递增 1。例如,B 的 ASCII 码是 66,C 的 ASCII 码是 67,一直到 Z,它的 ASCII 码是 90。可以简单地理解为,大写字母的 ASCII 码是一个连续的整数序列,起始点是 65,终点是 90。
小写字母 a - z 的 ASCII 码:
小写字母 a 的 ASCII 码是 97。同样地,从 a 开始,后续每个小写字母的 ASCII 码也依次递增 1。比如,b 的 ASCII 码是 98,c 的 ASCII 码是 99,一直到 z,它的 ASCII 码是 122。小写字母的 ASCII 码也是一个连续的整数序列,范围是从 97 到 122。
大写字母 | ASCII 码 | 小写字母 | ASCII 码 |
---|---|---|---|
A | 65 | a | 97 |
B | 66 | b | 98 |
C | 67 | c | 99 |
D | 68 | d | 100 |
E | 69 | e | 101 |
F | 70 | f | 102 |
G | 71 | g | 103 |
H | 72 | h | 104 |
I | 73 | i | 105 |
J | 74 | j | 106 |
K | 75 | k | 107 |
L | 76 | l | 108 |
M | 77 | m | 109 |
N | 78 | n | 110 |
O | 79 | o | 111 |
P | 80 | p | 112 |
Q | 81 | q | 113 |
R | 82 | r | 114 |
S | 83 | s | 115 |
T | 84 | t | 116 |
U | 85 | u | 117 |
V | 86 | v | 118 |
W | 87 | w | 119 |
X | 88 | x | 120 |
Y | 89 | y | 121 |
Z | 90 | z | 122 |
(3)通过取余解决单位的换算问题:
对于时间:给定了毫秒也就是ms时,对应的秒,分钟和时间就是:
seconds = ms / 1000 % 60 ,minutes = ms /( 1000 * 60 )% 60,hours = ms / ( 1000 * 60 * 60 ) % 60
而常见的输出格式为:HH:MM:SS。其中 HH
表示时,值为 00 到 23,MM
表示分,值为 00 到 59,SS
表示秒,值为 00 到 59。时、分、秒 不足两位时补前导 00。所以对应的输出代码也就该为:
printf("%02d:%02d:%02d\n", hours, minutes, seconds);
注意:1.溢出问题:对于输入的数据是选择 int 还是 long long来存储?
2.输出问题:对于题目要求的输出格式需要注意是整型%d还是浮点数%f,%lf?而对于整型来说又有%d,%ld,%lld,%2d,%02d,对于小数来说又有%f,%lf,%.2f等。
我们将日期无非就是讲到那么几点,年、月、日、时、分、秒,以及他们在不同场景下的输入和输出。
对于日期就绕不开闰年这个概念,闰年是指2月份有29天,它的判定条件为:被4整除的同时且不能够被100整除,或是被400整除等于0.
if((a%4==0 && a%100!=0) || a/400==0)
因为这是很基础的东西,所以需要把它牢记。因为对于月份其实没什么好讲的,除了需要注意闰年时2月份的天数,其它没有什么太大差别。
接下来,我们可以学习一下如何更新星期一到星期天这个过程。因为一个星期是7天,我们在星期一到星期天时只需正常加1即可,那对于把星期天更新到星期一其实只需要对7取余即可。这样子的话就是(7 + 1)% 7 = 1了。
w = (w + 1) % 7;
让我们接着做到题试试(蓝桥云课P16955岁月流转):
据记载,公元 19001900 年 11 月 11 日是周一。而在这段时间里,有多少个月的第一天是周日呢?请你帮助我们计算出这个数目,并告诉我们结果是多少。
输出一个整数,表示在公元 1901 年 11 月 11 日到 2000 年 121月 31 日期间,有多少个月的第一天是周日。
参考代码如下:
#include
#include
int main(int argc, char *argv[])
{
int n = 0 ;
int num = ( 1900 % 400 == 0 ) || ( 1900 % 4 == 0 && 1900 % 100 != 0 ) ? 366 : 365 ;
for( int i = 1901 ; i <=2000 ; i++ ) {
int month[] = {0,31,( i % 400 == 0 ) || (( i % 4 == 0 ) && ( i % 100 != 0 ))?29:28,31,30,31,30,31,31,30,31,30,31};
for( int j = 1 ; j <= 12 ; j++ ) {
num += month[ j - 1 ];
int k = num;
if( k % 7 == 6 ) {
n++;
}
}
num += month[12];
}
printf("%d",n);
return 0;
}
其实道理很简单,假如现在是星期一(星期一记为0),那么是不是只要加上月数对7取余,余数是几,那下次是星期几就可以用星期一加上余数来得到。
其实,对于单位换算和日期常见的问题就那么几种,这些都是蓝桥杯中较容易掌握的知识点,只要稍加练习,相信各位天才都能很快学会!