查看完整版本 : 年糕

tom.care 2019-1-28 11:05 PM

年糕

*** 作者被禁止或刪除 內容自動屏蔽 ***

煙民母親生賤種 2019-1-29 02:24 AM

[quote]原帖由 [i]tom.care[/i] 於 2019-1-28 11:05 PM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=494110361&ptid=28002728][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]
[url=https://leetcode.com/problems/equal-rational-numbers/]https://leetcode.com/problems/equal-rational-numbers/[/url] [/quote]寫唔太難,但要做到完全無 bug 幾難。:fst_007:

xianrenb 2019-1-29 07:28 PM

[quote]原帖由 [i]tom.care[/i] 於 2019-1-28 11:05 PM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=494110361&ptid=28002728][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]
[url=https://leetcode.com/problems/equal-rational-numbers/]https://leetcode.com/problems/equal-rational-numbers/[/url] [/quote]

code 貼到:
[url=https://gist.github.com/xianrenb/c8cc710884cfe3e7da4acb768d071780]https://gist.github.com/xianrenb/c8cc710884cfe3e7da4acb768d071780[/url]

也在 LeetCode 試過了。
Accepted 。

第一次正常完成到這種 online judge 平台內的 problem 。

xianrenb 2019-1-29 07:36 PM

[quote]原帖由 [i]xianrenb[/i] 於 2019-1-29 07:28 PM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=494149443&ptid=28002728][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]


code 貼到:
[url=https://gist.github.com/xianrenb/c8cc710884cfe3e7da4acb768d071780]https://gist.github.com/xianrenb/c8cc710884cfe3e7da4acb768d071780[/url]

也在 LeetCode 試過了。
Accepted 。

第一次正常完成到這種 online judge 平台內的 problem 。 ... [/quote]

再看,原來最後版本有些無用的 code 。
這是因為中途有 bug ,改寫後就變成多了這個 numDigits() 。

tom.care 2019-2-4 03:12 AM

*** 作者被禁止或刪除 內容自動屏蔽 ***

煙民母親生賤種 2019-2-4 04:51 AM

[quote]原帖由 [i]tom.care[/i] 於 2019-2-4 03:12 AM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=494403195&ptid=28002728][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]

9288857 [/quote]點解唔切埋?:fst_008:

東邊日出西邊雨 2019-2-4 01:40 PM

[quote]原帖由 [i]煙民母親生賤種[/i] 於 2019-2-4 04:51 AM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=494404053&ptid=28002728][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]
點解唔切埋?:fst_008: [/quote]

既然系無窮循環小數,就梗系切不斷啦 。。。 ;P

tom.care 2019-2-9 08:49 AM

*** 作者被禁止或刪除 內容自動屏蔽 ***

tom.care 2019-2-15 11:46 PM

*** 作者被禁止或刪除 內容自動屏蔽 ***

darigold 2019-2-16 01:27 PM

[quote]原帖由 [i]tom.care[/i] 於 2019-1-28 11:05 PM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=494110361&ptid=28002728][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]
[url=https://leetcode.com/problems/equal-rational-numbers/]https://leetcode.com/problems/equal-rational-numbers/[/url]
[/quote][code]class Helper
{
public:
  Helper(string& str) : m_str(str)
  {
    m_d = -1;
    m_o = -1;
    m_l = m_str.length();
    for (int i = 0; i < m_str.length(); i++)
    {
      if (m_str[i] == '.')
      {
        m_d = i;
      }
      else if (m_str[i] == '(')
      {
        m_o = i;
      }
    }
    m_9 = false;
    if (m_o != -1)
    {
      m_9 = true;
      for (int i = m_o + 1; i < m_l - 1; i++)
      {
        if (m_str[i] != '9')
        {
          m_9 = false;
          break;
        }
      }
    }
    m_carry = m_9;
  }

  int get_integer_part_length()
  {
    if (m_d == -1)
    {
      return m_l;
    }
    else
    {
      return m_d;
    }   
  }

  char get_integer_part_character(int i)
  {
    char c;
    if (i < m_p)
    {
      c = '0';
    }
    else
    {
      c = m_str[i - m_p];
    }
    return process_carry(c);
  }

  int get_decimal_part_length()
  {
    if (m_d == -1)
    {
      return 0;
    }
    else if (m_o == -1)
    {
      return m_l - m_d - 1;
    }
    else
    {
      return m_o - m_d - 1;
    }
  }

  char get_decimal_part_character(int i)
  {
    char c;
    if (i < get_decimal_part_length())
    {
      c = m_str[m_d + i + 1];
    }
    else
    {
      if (m_o == -1)
      {
        c = '0';
      }
      else
      {
        c = m_str[m_o + 1 + (i - get_decimal_part_length()) % get_repeating_part_length()];
      }
    }
   
    return process_carry(c);
  }

  int get_repeating_part_length()
  {
    if (m_9)
    {
      return 1;
    }
    else if (m_o == -1)
    {
      return 1;
    }
    else
    {
      return m_l - m_o - 2;
    }   
  }
  
  char get_repeating_character(int i)
  {
    if (m_9)
    {
      return '0';
    }
    else if (m_o == -1)
    {
      return '0';
    }
    else
    {
      return m_str[m_o + 1 + (m_r + i) % get_repeating_part_length()];
    }
  }

  void pad(int that_integer_part_length)
  {
    int this_integer_part_length = this->get_integer_part_length();
    if (this_integer_part_length < that_integer_part_length)
    {
      m_p = that_integer_part_length - this_integer_part_length;
    }
    else
    {
      m_p = 0;
    }   
  }
  void unroll(int that_decimal_part_length)
  {
    int this_decimal_part_length = this->get_decimal_part_length();
    if (this_decimal_part_length < that_decimal_part_length)
    {
      m_r = that_decimal_part_length - this_decimal_part_length;
    }
    else
    {
      m_r = 0;
    }
  }
private:
  string& m_str;
  int m_d;
  int m_o;
  int m_l;
  bool m_9;
  int m_r;
  int m_p;
  bool m_carry;
  char process_carry(char c)
  {
    if (m_carry)
    {
      if (c == '9')
      {
        c = '0';
      }
      else
      {
        c = c + 1;
        m_carry = false;
      }
    }
    return c;   
  }
};
class Solution
{
public:
  bool isRationalEqual(string S, string T)
  {
    Helper s(S);
    Helper t(T);

    int s_integer_part_length = s.get_integer_part_length();
    int t_integer_part_length = t.get_integer_part_length();

    int s_decimal_part_length = s.get_decimal_part_length();
    int t_decimal_part_length = t.get_decimal_part_length();

    int s_repeating_part_length = s.get_repeating_part_length();
    int t_repeating_part_length = t.get_repeating_part_length();

    s.unroll(t_decimal_part_length);
    t.unroll(s_decimal_part_length);

    s.pad(t_integer_part_length);
    t.pad(s_integer_part_length);

    int common_integer_part_length = max(s_integer_part_length, t_integer_part_length);
    int common_decimal_part_length = max(s_decimal_part_length, t_decimal_part_length);
    int common_repeating_part_length = lcm(s_repeating_part_length, t_repeating_part_length);

    for (int i = 0; i < common_repeating_part_length; i++)
    {
      if (s.get_repeating_character(i) != t.get_repeating_character(i))
      {
        return false;
      }
    }
    for (int i = common_decimal_part_length - 1; i >= 0; i--)
    {
      if (s.get_decimal_part_character(i) != t.get_decimal_part_character(i))
      {
        return false;
      }
    }
    for (int i = common_integer_part_length - 1; i >= 0; i--)
    {
      if (s.get_integer_part_character(i) != t.get_integer_part_character(i))
      {
        return false;
      }
    }
    return true;
  }
private:
  int lcm(int a, int b)
  {
    return a * b / gcd(a, b);
  }
  int gcd(int a, int b)
  {
    if (b > a)
    {
      return gcd(b, a);
    }
    else if (b == 0)
    {
      return a;
    }
    else
    {
      return gcd(b, b % a);
    }
   
  }
};[/code]
頁: [1]
查看完整版本: 年糕