- 博客(4)
- 收藏
- 关注
原创 高精度加法(A+B问题)
A+B,作为算法竞赛中最难的一题(雾),总是吸引着广大程序员想尽一切算法想要去AC它: 这里提供一种高精度的做法: #include <iostream> #define maxn 10000000 + 5 using namespace std; string in; int a[maxn], b[maxn], c[maxn];//分别为两个加数、和 int l1, l2, ...
2018-09-30 20:55:34 647
原创 位运算:a^b
手写快速幂函数。 由于这里需要对p取模,而且p在int范围内,所以不需要高精度。所以就用位运算吧。这里仍然要用到二进制的思想,将b转为2进制来做。eg. ∵11 = 1011(2) = 1 * 2^3 + 0 * 2 ^2 + 1 * 2^1 + 1 * 2^0,∴2^11 = 2^(1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0) = 2...
2018-09-24 00:10:11 380
原创 位运算:64位整数的乘法
由于有对p取模的操作,就显然不是高精度算法,而且p的范围在long long以内。所以我们不妨试试位运算,并结合一下快速幂的思想。 我们可以将b转成2进制数。eg. ∵11 =1011(2) = 1 * 2^3 + 0 * 2^2 + 1 * 2^1 +1 * 2^0,∴2*11 = 2*(1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0) = 2*(2^3) +...
2018-09-23 23:55:14 566
原创 浅谈位运算
位运算是计算机的底层运算,让计算机来还做是相当快的。 那么随之而来的就是位运算的运算符,类似于逻辑门电路。 取反 对一个二进制数的每一位进行逻辑去反,符号为 ~。 eg. ~0111(十进制7) = 1000(十进制8)。 但是如果这样写: printf("%d", ~7); 则会得到-8。但是并没有任何问题。因为每个整数实数变量的第一个二进制位都是用来存符号的,代表...
2018-09-23 23:37:52 143
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人