![](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 · 968 阅读 · 1 评论 -
HDU1250_Hat's Fibonacci【高精度】【水题】
Hat's Fibonacci Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7854 Accepted Submission(s): 2551 Problem Description A Fibo原创 2014-10-20 10:47:28 · 960 阅读 · 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 · 1194 阅读 · 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 · 1158 阅读 · 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 · 567 阅读 · 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 · 581 阅读 · 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 · 623 阅读 · 0 评论 -
POJ1047 Round and Round We Go【高精度】
题目大意: 给定一个 N 位的整数 s,判断该数乘以 i (1 <= i <= N),是否还由该数各个位上的数 循环变换后的数组成。 例如:142857 142857 *1 = 142857 142857 *2 = 285714 142857 *3 = 428571 142857 *4 = 571428 142857 *5 = 714285 142857 *6 = 857142 解题思路: 可以看作一道高精度的模拟题,用一个 string 数组 Num[],其中 Num[0] 来存放原数,原创 2015-09-18 22:36:35 · 771 阅读 · 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 · 1123 阅读 · 0 评论