【紫书总结】第四章 ---函数和递归

优秀代码

利用将字符串转化为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;
}

编码小技巧

  1. main函数是整个程序的入口,包括评测系统,,这个0代表的是“正常结束”,所以在算法竞赛中, 请总是让main函数返回0, 以免评测机系统错误的认为程序异常退出了。
  2. 注意变量数据范围的问题,可能一不小心就溢出了。
数据类型数据范围备注
char-128 ~ +127 (1 Byte)注意这个范围,如果存储了不在这个范围内的字符,就会输出乱码!
short-32767 ~ + 32768 (2 Bytes)记住正负三万多
unsigned short0 ~ 65536(2 Bytes)差不多的长度,只是范围往后移动了而已,正六万多。
int-2147483648 ~ +2147483647 (4 Bytes)记住能存储正负2.1* 10^10左右
unsigned int0 ~ 4294967295 (4 Bytes)记住能存储4.2* 10^10左右
long== int
long long-9223372036854775808 ~ +9223372036854775807 (8 Bytes)记住能存储9.2 * 10^19左右
double1.7 * 10^308 (8 Bytes)
  1. 注意优先级的问题,有时候就是这些小细节导致整个程序出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 , 逗号 自左向右
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值