![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
高精度 | 进制相关
ITCharge
高效率编程,慢节奏生活。
展开
-
POJ2506 Tiling【高精度】【递推】
题目大意:有一个大小2*N的矩形地板,用规格为2*2和2*1的瓷砖方块去填满它,共有多少种方案思路:设长度为N的矩形地板共有F[N]种方案。共有三种放法:先放一块2*2瓷砖方块,则F[N] = F[N-2]。先放两块横着的1*2的瓷砖,则F[N] = F[N-2]。先放一块竖着的2*1的瓷砖,则F[N] = F[N-1]。总和一下,就是:F[N] = F[N-1] + 2*F[N-2]。因为0 <= N <= 250,所以要用到高精度。用整型数组F[][]来计算,然后用字符型数组Fi[][原创 2015-04-18 09:54:40 · 971 阅读 · 1 评论 -
HDU1250_Hat's Fibonacci【高精度】【水题】
Hat's FibonacciTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7854 Accepted Submission(s): 2551Problem DescriptionA Fibo原创 2014-10-20 10:47:28 · 965 阅读 · 0 评论 -
POJ2413 How many Fibs?【高精度】【二分】
题目大意:定义fibonacci数列前两项f[1] = 1,f[2] = 2。现在给你一个区间[a,b],a <= b <= 10^100。问:区间[a,b]之间有多少个fibonacci数。思路:a、b的规模很大,是个100位10进制的数。所以要用数组模拟大整数加法求fibonacci数列。用整型二维数组F[i][]表示第i个fibonacci数,因为从个位倒着存入数组方便进位,所以F[i][]数组中的数是倒着的。第480个fibonacci数是101位,先求出前480个fibonacci数原创 2015-04-18 09:40:29 · 1204 阅读 · 0 评论 -
POJ1423 HDU1018 Big Number【斯特林公式】【高精度】
题目大意:求N!有多少位。1<=N<=10^7。思路:N的规模很大。不能直接模拟求位数。先考虑这种做法:设A = N! = 1*2*3*4*…*N,那么位数就是(int)log10(A) + 1而(int)log10(A) = log10(1*2*3*…*N) = log10(1) * log10(2) * log10(3) * … * log10(N)这样累加起来就是结果了。不过因为N是10^7规模的,所以这样累加在HDU上可以AC,但是POJ上还是超时的。应该用斯特林公式来做。Sti原创 2015-04-14 18:22:19 · 1167 阅读 · 0 评论 -
HDU5491 The Next【二进制】
题目大意:L 是整数 D 的二进制中 1 的个数,如果 s1 <= L <= s2,则称 D 是一个 WYH数。现在给你一个整数 D 和 s1、s2,求比 D 大的下一个 WYH数是多少。解题思路:参考博文:http://blog.csdn.net/joyce__yin/article/details/48786131从低位向高位考虑。用数组 Num[] 来存 D 的二进制形式(从低位到高位),Sum[] 来存储二进制从高位到当前位上 1 的个数。然后从低位到高位枚举 D原创 2015-10-02 19:14:26 · 569 阅读 · 0 评论 -
POJ1001 Exponentiation【高精度】
题目大意:给你一个浮点数 s 和整数 N,求 s 的 N 次方。其中(0 < N <= 5),而浮点数 s 算上小数点共占 6 位。解题思路:考虑到浮点数 s 最多只有 6 位,且 N 最多为25,那么通过 s 的小数点位置计算出小数点在 s 的 N 次方的结果中的位置。然后将 s 变为不含小数点的整数 num,通过高精度乘以单精度的模板求出 num 的 N 次方。然后根据题目要求输出结果。注意:不仅要清除整数部分的前导 0,还要清除小数部分后边的 0。原创 2015-09-17 11:40:45 · 585 阅读 · 0 评论 -
POJ1023 The Fun Number System【进制相关】
题目大意:给一个长度为 k 的字符串 s,每一位有两种状态,'p'表示该位上的权值为+2^i,'n'表示-2^i。再给你一个整数 N。求一个 k 位的二进制数,能够通过与字符串 s 对应位置上的相应变换,最终等于整数 N。例如:N 为10,字符串 s 为"ppnn"。则所求二进制数为 1110。变换为 1*2^3 + 1*2^2 - 1*2^1 - 0*2^0 == 10。解题思路:已知 N 的二进制为 k 位。从 N 的低位向高位考虑。若 N 为偶数,则最低位必为 0原创 2015-09-17 22:55:35 · 629 阅读 · 0 评论 -
POJ1047 Round and Round We Go【高精度】
题目大意:给定一个 N 位的整数 s,判断该数乘以 i (1 <= i <= N),是否还由该数各个位上的数循环变换后的数组成。例如:142857142857 *1 = 142857142857 *2 = 285714142857 *3 = 428571142857 *4 = 571428142857 *5 = 714285142857 *6 = 857142解题思路:可以看作一道高精度的模拟题,用一个 string 数组 Num[],其中 Num[0] 来存放原数,原创 2015-09-18 22:36:35 · 779 阅读 · 1 评论 -
POJ3101 Astronomy【素因子分解】【大数乘法】
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<cmath>using namespace std;const int MAXN = 1010;int GCD(int a,int b){ if(b == 0) return a; return GCD(b,a%b);}int A[MAXN],B[MAXN],C[MAXN*10];int ma原创 2015-11-15 20:25:20 · 1126 阅读 · 0 评论