poj 3431 Java实现
来源:互联网 发布:单片机中断初始化程序 编辑:程序博客网 时间:2024/06/07 12:11
poj 3431 Java实现
import java.util.Scanner;public class Main3413 {//poj3413static int[][] fibarray = new int[502][106];static int[] bigInterAdd(int[] a, int[] b) {int[] temRes = new int[a.length];if (a[0] == 0) {return b;} else if (b[0] == 0) {return a;}for (int i = 1; i < a.length; i++) {temRes[i] += a[i] + b[i];if (temRes[i] > 9) {temRes[i] = temRes[i] % 10;temRes[i + 1]++;}}return temRes;}static int[] fib(int n) {if (n == 1) {fibarray[1][1] = 1;fibarray[1][0] = 1;return fibarray[1];}if (n == 2) {fibarray[2][1] = 2;fibarray[2][0] = 1;return fibarray[2];}if (fibarray[n][0] == 0) {fibarray[n] = bigInterAdd(fib(n - 1), fib(n - 2));fibarray[n][0] = 1;}return fibarray[n];}static int binaFindLeft(int[] a, int left, int right) {int mid = (left + right) / 2;int compRes = compTo(a, fib(mid));if (compRes == 0) {return mid;}if (mid == left) {return right;}if (compRes == -1) {return binaFindLeft(a, left, mid);} else {return binaFindLeft(a, mid, right);}}static int binaFindRight(int[] a, int left, int right) {int mid = (left + right) / 2;int compRes = compTo(a, fib(mid));if (compRes == 0) {return mid;}if (mid == left) {return mid;}if (compRes == -1) {return binaFindRight(a, left, mid);} else {return binaFindRight(a, mid, right);}}static int compTo(int[] a, int[] b) {for (int i = a.length - 1; i > 0; i--) {if (a[i] > b[i]) {return 1;}if (a[i] < b[i]) {return -1;}}return 0;}public static void main(String[] args) throws Exception {System.setIn(new java.io.FileInputStream("1.txt"));Scanner in = new Scanner(System.in);fib(501);while (true) {String begain, end;begain = in.next();end = in.next();int[] s = new int[106];int[] zero = new int[106];for (int i = 1; i <= begain.length(); i++) {s[i] = begain.charAt(begain.length() - i) - '0';}int[] e = new int[106];for (int i = 1; i <= end.length(); i++) {e[i] = end.charAt(end.length() - i) - '0';}int sIsZero,eIsZero;sIsZero=compTo(s, zero);eIsZero=compTo(e, zero) ;if ( sIsZero== 0 && eIsZero== 0) {break;}int firstnum, endnum;if (sIsZero==0) {firstnum=1;}else {firstnum = binaFindLeft(s, 1, 501);}endnum = binaFindRight(e, 1, 501);int totalnum = 0;if (endnum >= firstnum) {totalnum = endnum - firstnum + 1;}System.out.println(totalnum);}}}
阅读全文
0 0
- poj 3431 Java实现
- POJ 1185 java实现
- poj 1260 Java实现
- POJ 3267 java实现
- POJ 3735 java实现
- 北大POJ 1001 (Java实现)
- POJ 2636 Electrical Outlets java实现
- Java实现POJ 1017:装箱问题
- poj 3070 java实现矩阵快速幂
- POJ 1001 Exponentiation(大数幂Java实现)
- 【java实现大实数幂次方】POJ 1001
- poj 1007实现感想
- poj 1001代码实现
- POJ 2418 Java
- POJ 2299 Java
- POJ 1011 - Java
- poj 1032 java版本
- poj 2389 Java
- 服务器java客户端C#的Socket通讯遇到的坑
- mui-switch 修改 on off 文本
- 微信公众平台之使用PPT制作图片
- centos7重启apache、nginx、mysql、php-fpm命令
- 在不同页面设置与获取cookie值的实例
- poj 3431 Java实现
- 警告:returning pointer to local variable
- 迭代器
- Deduplication on a Linked List(两个测试点)
- hdu2082 母函数+背包
- 杭电1037题-轮子过地下通道
- Mongodb在renameCollection之后,记得千万要立即补建索引
- mmc_init函数流程分析
- qt5快捷按不好用如何设置?