簡體   English   中英

如何將此Python代碼轉換為C ++

[英]How to convert this Python code to C++

我在Python中有一個有效的算法,想將其轉換為C ++:

def gcd(a, b):    
    if (a % b == 0):
        return b
    else:
        return gcd(b, a % b)

def solution(N, M):
    lcm = N * M / gcd(N, M)
    return lcm / M

我遇到了輸入值較大的問題,因為N和M的倍數會導致整數溢出,並且使用long來存儲其值似乎無濟於事,除非我做錯了事。

這是我當前的代碼:

int gcd(int a, int b)
{
    if (a % b == 0)
        return b;
    else
        return gcd(b, a % b);
}

int solution(int N, int M) {

    // Calculate greatest common divisor
    int g = gcd(N, M);

    // Calculate the least common multiple
    long m = N * M;
    int lcm = m / g;

    return lcm / M;
}

首先,更改:

long m = N * M;
int lcm = m / g;

至:

long long m = (long long)N * M;
int lcm = (int)(m / g);

通常,您最好將代碼中的每個int更改為unsigned long long ...

但是,如果手頭有一些BigInt類,則可能要改用它。

這是免費的一個: http : //planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=9735&lngWId=3

它存儲任何可能大小的自然數,並支持C ++中提供的所有算術運算符。

您正在計算g=gcd(N,M) ,然后是m=N*M ,然后是lcm=m/g ,最后返回lcm/M 這與返回N/gcd(N,M) 您不需要這些中間計算。 擺脫它們。 現在,溢出沒有問題(除非M = 0,也就是說,您無法避免)。

int solution(int N, int M) {
   if (M == 0) {
      handle_error();
   }
   else {
      return N / gcd(N,M);
   }
}

問題出在long m = N*M. 乘法僅作為32位整數發生。 由於兩者均為int類型,因此會發生溢出。

校正long long m = (long long)N*M

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM