优秀代码
利用将字符串转化为m进制的数字
先看一个小技巧(将数字反过来输出。)
int n = 63945;
int ans = 0;
while (n) ans = ans * 10 + n % 10, n /= 10;
// 输出 54936
将其进行扩展
#include<stdio.h>
#include<string.h>
int Base_conversion(char* s, int n, int m)
{
int sum = 0;
for (int i = 0; i < n; ++i) sum = sum * m + s[i] - '0';
return sum;
}
int main()
{
char Binary_number[] = "10101000010";
int n = strlen(Binary_number);
printf("二进制数10101000010(2)变成十进制为:%d\n", Base_conversion(Binary_number, n, 2));
printf("八进制数10101000010(8)变成十进制为:%d\n", Base_conversion(Binary_number, n, 8));
/*运行结果为:
*二进制数10101000010(2)变成十进制为:1346
*八进制数10101000010(8)变成十进制为:1090781192
*/
return 0;
}
将坐标表示的两个变量变成一个变量存储,要用时变成两个变量使用
#include<stdio.h>
const int BIG = 1000;
int main()
{
int x = 1, y = 9;
int sum = x * BIG + y;
printf("(%d, %d)\n", sum / BIG, sum % BIG);
// 输出结果:(1, 9)
return 0;
}
编码小技巧
- main函数是整个程序的入口,包括评测系统,,这个0代表的是“正常结束”,所以在算法竞赛中, 请总是让main函数返回0, 以免评测机系统错误的认为程序异常退出了。
- 注意变量数据范围的问题,可能一不小心就溢出了。
数据类型 | 数据范围 | 备注 |
---|---|---|
char | -128 ~ +127 (1 Byte) | 注意这个范围,如果存储了不在这个范围内的字符,就会输出乱码! |
short | -32767 ~ + 32768 (2 Bytes) | 记住正负三万多 |
unsigned short | 0 ~ 65536(2 Bytes) | 差不多的长度,只是范围往后移动了而已,正六万多。 |
int | -2147483648 ~ +2147483647 (4 Bytes) | 记住能存储正负2.1* 10^10左右 |
unsigned int | 0 ~ 4294967295 (4 Bytes) | 记住能存储4.2* 10^10左右 |
long == int | ||
long long | -9223372036854775808 ~ +9223372036854775807 (8 Bytes) | 记住能存储9.2 * 10^19左右 |
double | 1.7 * 10^308 (8 Bytes) |
- 注意优先级的问题,有时候就是这些小细节导致整个程序出BUG
优先级 | 运算符 | 说明 | 结合性 |
---|---|---|---|
1 | :: | 范围解析 | 自左向右 |
2 | ++ -- | 后缀自增/后缀自减 | |
() | 括号 | ||
[] | 数组下标 | ||
. | 成员选择(对象) | ||
−> | 成员选择(指针) | ||
3 | ++ -- | 前缀自增/前缀自减 | 自右向左 |
+ − | 加/减 | ||
! ~ | 逻辑非/按位取反 | ||
(type) | 强制类型转换 | ||
* | 取指针指向的值 | ||
& | 某某的地址 | ||
sizeof | 某某的大小 | ||
new, new[] | 动态内存分配/动态数组内存分配 | ||
delete, delete[] | 动态内存释放/动态数组内存释放 | ||
4 | .* ->* | 成员对象选择/成员指针选择 | 自左向右 |
5 | * / % | 乘法/除法/取余 | |
6 | + − | 加号/减号 | |
7 | << >> | 位左移/位右移 | |
8 | < <= | 小于/小于等于 | |
> >= | 大于/大于等于 | ||
9 | == != | 等于/不等于 | |
10 | & | 按位与 | |
11 | ^ | 按位异或 | |
12 | | | 按位或 | |
13 | && | 与运算 | |
14 | || | 或运算 | |
15 | ?: | 三目运算符 | 自右向左 |
16 | = | 赋值 | |
+= −= | 相加后赋值/相减后赋值 | ||
*= /= %= | 相乘后赋值/相除后赋值/取余后赋值 | ||
<<= >>= | 位左移赋值/位右移赋值 | ||
&= ^= |= | 位与运算后赋值/位异或运算后赋值/位或运算后赋值 | ||
17 | throw | 抛出异常 | |
18 | , | 逗号 | 自左向右 |