zoukankan      html  css  js  c++  java
  • BigNums 之 hdu 1316

    //  [4/14/2014 Sjm]
    /*
    考虑好边界处理,即可 AC 。
    
    (
     虽然题目所给数据值很大,但无需优化,亦可水过。。。
     下面附 Java 的 AC 代码,第一次用 Java 交代码,
     很久不用 Java,照着文档,调试很长时间。。。。。
     不得不感叹 Java 对于大数处理的便捷与高效,自己写的C++代码效率太低了。
    )
    */
    Accepted 1316 890MS 276K 1742 B C++
     1 //(1) C++ 代码
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <cstring>
     6 #include <string>
     7 #include <cstring>
     8 #include <algorithm>
     9 using namespace std;
    10 string str_1, str_2;
    11 
    12 bool Cmp(string str1, string str2)
    13 {
    14     int len1 = str1.size(), len2 = str2.size();
    15     if (len1 > len2) return true;
    16     if (len1 < len2) return false;
    17     for (int i = 0; i < len1; i++) {
    18         if (str1[i] == str2[i]) continue;
    19         if ((str1[i] - '0') >(str2[i] - '0')) return true;
    20         else return false;
    21     }
    22     return true;
    23 }
    24 
    25 bool myJudge(string str)
    26 {
    27     if (Cmp(str, str_1) && Cmp(str_2, str)) return true;
    28     else return false;
    29 }
    30 
    31 string myAdd(string str1, string str2)
    32 {
    33     string str = "";
    34     int temp = 0, len1 = str1.size() - 1, len2 = str2.size() - 1;
    35     while (len1 != -1 && len2 != -1) {
    36         temp = (str1[len1--] - '0') + (str2[len2--] - '0') + temp;
    37         str = char('0' + temp % 10) + str;
    38         temp /= 10;
    39     }
    40     while (len1 != -1) {
    41         temp = (str1[len1--] - '0') + temp;
    42         str = char('0' + temp % 10) + str;
    43         temp /= 10;
    44     }
    45     while (len2 != -1) {
    46         temp = (str2[len2--] - '0') + temp;
    47         str = char('0' + temp % 10) + str;
    48         temp /= 10;
    49     }
    50     if (temp) str = char(temp + '0') + str;
    51     return str;
    52 }
    53 
    54 int main()
    55 {
    56     //freopen("input.txt", "r", stdin);
    57     //freopen("output.txt", "w", stdout);
    58     while (cin >> str_1 >> str_2 && (str_1 != "0" || str_2 != "0"))
    59     { 
    60         int ans = 0;
    61         string str, str1 = "1", str2 = "2";
    62         if (!Cmp(str_2, str1)) {
    63             printf("%d
    ", ans);
    64             continue;
    65         }
    66         if (myJudge(str1)) ans++;
    67         if (!Cmp(str_2, str2)) {
    68             printf("%d
    ", ans);
    69             continue;
    70         }
    71         if (myJudge(str2)) ans++;
    72         str = myAdd(str1, str2);
    73         while (Cmp(str_2, str)){
    74             if (myJudge(str))
    75                 ans++;
    76             str1 = str2;
    77             str2 = str;
    78             str = myAdd(str1, str2);
    79         }
    80         printf("%d
    ", ans);
    81     }
    82     return 0;
    83 }
    Accepted 1316 203MS 5680K 884 B Java
     1 // Java 代码
     2 import java.util.*;
     3 import java.math.*;
     4 import java.io.*;
     5 
     6 public class Main {
     7     public static void main(String[] agrs) {
     8         BigInteger[]fib = new BigInteger[500];
     9         fib[1] = new BigInteger("1");
    10         fib[2] = new BigInteger("2");
    11         for (int i = 3; i<500; i++) {
    12             fib[i] = fib[i - 2].add(fib[i - 1]);
    13             
    14             // 用于判断 10^100 边界值
    15             //String str = fib[i].toString();
    16             //if (100 < str.length()) {
    17             //System.out.println(i);
    18             //} 
    19         }
    20         Scanner input = new Scanner(new BufferedInputStream(System.in));
    21         BigInteger mydata1, mydata2;
    22         while (input.hasNextBigInteger()){
    23             mydata1 = input.nextBigInteger();
    24             mydata2 = input.nextBigInteger();
    25             if (mydata1.compareTo(BigInteger.valueOf(0)) == 0 && mydata2.compareTo(BigInteger.valueOf(0)) == 0) {
    26                 break;
    27             }
    28             int pos = 1, ans = 0;
    29             while (fib[pos].compareTo(mydata2) != 1) {
    30                 if ((fib[pos].compareTo(mydata1) != -1) && (mydata2.compareTo(fib[pos]) != -1)) {
    31                     ans++;
    32                 }
    33                 pos++;
    34             }
    35             System.out.println(ans);
    36         }
    37     }
    38 }
  • 相关阅读:
    数据库生成连续编号 前几位为零
    C#中图片与BASE64码互相转换
    C#基于Socket的CS模式的完整例子
    一个公共类
    HttpCookie 操作Cookie
    C#打包SQL数据库部署安装
    <转>遍历 进程 内的内核对象
    《windows核心编程》–Windows内存体结构(二)
    《windows核心编程》–Windows内存体结构(一)
    《windows 核心编程》 探索虚拟内存
  • 原文地址:https://www.cnblogs.com/shijianming/p/4140856.html
Copyright © 2011-2022 走看看