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 }
  • 相关阅读:
    显示文件本地文件夹
    Select Dependencies选择依赖项
    搜索小技巧
    783. Minimum Distance Between BST Nodes BST节点之间的最小距离
    5. Longest Palindromic Substring 最长的回文子串
    12. Integer to Roman 整数转罗马数字
    3. Longest Substring Without Repeating Characters 最长的子串不重复字符
    539. Minimum Time Difference 最小时差
    43. Multiply Strings 字符串相乘
    445. Add Two Numbers II 两个数字相加2
  • 原文地址:https://www.cnblogs.com/shijianming/p/4140856.html
Copyright © 2011-2022 走看看