<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    emu in blogjava

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      171 隨筆 :: 103 文章 :: 1052 評論 :: 2 Trackbacks

    Problem Statement

        

    A rational number is defined as a/b, where a and b are integers, and b is greater than 0. Furthermore, a rational number can be written as a decimal that has a group of digits that repeat indefinitely. A common method of writing groups of repeating digits is to place them inside parentheses like 2.85(23) = 2.852323 ... 23...

    Given a decimal representation of a rational number in decimalNumber, convert it to a fraction formatted as "numerator/denominator", where both numerator and denominator are integers. The fraction must be reduced. In other words, the denominator must be as small as possible, but greater than zero.

    Definition

        
    Class: RecurringNumbers
    Method: convertToFraction
    Parameters: String
    Returns: String
    Method signature: String convertToFraction(String decimalNumber)
    (be sure your method is public)
        

    Constraints

    - decimalNumber will have between 3 and 10 characters inclusive.
    - decimalNumber will contain only characters '0' - '9', '.', '(' and ')'.
    - The second character in decimalNumber will always be '.'.
    - There will be at most one '(' and ')' in decimalNumber.
    - '(' in decimalNumber will be followed by one or more digits ('0' - '9'), followed by ')'.
    - ')' in decimalNumber will not be followed by any other character.

    Examples

    0)
        
    "0.(3)"
    Returns: "1/3"
    0.(3) = 0.333... = 1/3
    1)
        
    "1.3125"
    Returns: "21/16"
    Note there are no recurring digits here, although we could write it as 1.3125(0) or 1.3124(9).
    2)
        
    "2.85(23)"
    Returns: "14119/4950"
    2.85(23) = 2.852323... = 285/100 + 23/9900 = 28238/9900 = 14119/4950. Make sure to reduce the fraction, as shown in the final step.
    3)
        
    "9.123(456)"
    Returns: "3038111/333000"
    4)
        
    "0.111(1)"
    Returns: "1/9"
    5)
        
    "3.(000)"
    Returns: "3/1"

    This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved.

    posted on 2005-12-23 09:30 emu 閱讀(1372) 評論(2)  編輯  收藏 所屬分類: google編程大賽模擬題及入圍賽真題

    評論

    # re: RecurringNumbers (code jam china 1000分真題) 2006-07-07 15:24 黎吾平
    import java.util.*;

    public class RecurringNumbers
    {
    public static void main(String[] args)
    {
    System.out.println(convertToFraction("9.123(456)"));
    }

    public static String convertToFraction(String decimalNumber)
    {
    int intPart = Integer.parseInt(decimalNumber.substring(0, 1)); //整數部分

    int dotIndex = decimalNumber.indexOf('.'); //小數點的位置
    int braceIndex = decimalNumber.indexOf('('); //左括號的位置
    int lastIndex = 0;

    if (braceIndex == -1) //無循環部分
    {
    lastIndex = decimalNumber.length();
    }
    else //有循環部分
    {
    lastIndex = braceIndex;
    }

    //讀取非循環部分
    String part1 = decimalNumber.substring(dotIndex+1, lastIndex);

    int numerator, denominator = 0;
    if (braceIndex != -1) //有循環部分
    {
    //讀循環部分
    lastIndex = decimalNumber.indexOf(')');
    String part2 = decimalNumber.substring(braceIndex+1, lastIndex);


    //生成全是9的數,長度為循環部分的長度
    for (int i = 0; i < part2.length(); i++)
    {
    denominator = denominator * 10 + 9;
    }

    if (part1.length() == 0) //如果非循環部分為空
    {
    numerator = Integer.parseInt(part2) - 0;
    }
    else
    {
    numerator = Integer.parseInt(part1 + part2) - Integer.parseInt(part1);
    denominator *= ((int)Math.pow(10, part1.length()));
    }
    }
    else //無循環部分
    {
    numerator = Integer.parseInt(part1);
    denominator = (int)Math.pow(10, part1.length());
    }

    //加上整數部分并化簡分數
    numerator += denominator * intPart;
    int min = denominator > numerator ? numerator : denominator;
    for (int i = 2; i <= min;)
    {
    if ((numerator % i == 0) && (denominator % i == 0))
    {
    numerator /= i;
    denominator /= i;
    i = 2;
    }
    else
    {
    i++;
    }
    }

    return Integer.toString(numerator) + "/" + Integer.toString(denominator);
    }
    }  回復  更多評論
      

    # re: RecurringNumbers (code jam china 1000分真題) 2011-08-14 11:46 li.stayhere
    題目很全。 這個題目的關鍵是轉換為等比級數的形式(xyz)=xyz/(10的三次方 - 1)  回復  更多評論
      

    主站蜘蛛池模板: 免费人成在线视频| 国产在线观看麻豆91精品免费| 国产成人免费一区二区三区| 朝桐光亚洲专区在线中文字幕 | 亚洲字幕AV一区二区三区四区| 亚洲最大的成人网| 色影音免费色资源| 亚洲一区二区三区国产精品无码| 亚洲毛片免费观看| 亚洲愉拍99热成人精品热久久| 国产精品亚洲自在线播放页码| 日韩在线播放全免费| 亚洲最大福利视频| 国产精品免费看香蕉| 永久免费无码日韩视频| 免费观看国产网址你懂的| 亚洲日本人成中文字幕| 我想看一级毛片免费的| 亚洲久本草在线中文字幕| 深夜a级毛片免费视频| 成年女人色毛片免费看| 亚洲av成人一区二区三区在线播放 | 亚洲色图在线观看| 噼里啪啦电影在线观看免费高清 | 国产美女视频免费观看的网站| 亚洲精品午夜国产VA久久成人| 精品亚洲视频在线| 国产av无码专区亚洲av果冻传媒| 国产精品无码亚洲精品2021| 亚洲 小说区 图片区 都市| 久久九九全国免费| 久久久青草青青国产亚洲免观| 免费国产成人午夜在线观看| 亚洲av永久无码嘿嘿嘿| 亚洲国产精品成人AV无码久久综合影院| 亚洲日韩国产欧美一区二区三区| 免费一级毛片女人图片| 日韩精品无码一区二区三区免费| 久久精品国产亚洲av四虎| 无码国产精品一区二区免费虚拟VR | 永久在线观看免费视频|