請編寫程序,輸入兩個整數,計算並輸出它們的輸出最小公倍數。
說明:兩個整數可以是正數、零和負數。最小公倍數必須是自然數。題目保證兩個整數及其最小公倍數的絕對值都小於263
輸出最小公倍數(正整數)
輸入樣例1
935761 -5128800173759
輸出樣例1
4799331179396895599
輸入樣例2
-4187757414530339 587895547746
輸出樣例2
929682146025735258
輸入樣例3
7 0
輸出樣例3
0
輸入樣例4
0 0
輸出樣例4
0
讀題:
兩個整數可以是正數、零和負數
保證兩個整數及其最小公倍數的絕對值都小於263
輸出最小公倍數(正整數)
通過上面的條件可以知道, 使用 unsigned int 或者 int 類型的數據都是不可以的, 這裡只能用 long long 類型。
另外 我們知道 M, N 的最小公倍數 實際上是: M*N/最大公約數。但是這裡有一點要注意的就是, 要考慮 M * N 值的範圍超過 long long 類型的最大值的情況, 所以 我們可以把 最小公倍數 的計算修改一下為: M/最大公約數 * N 的方式 或者 N/最大公約數 * M 的形式:
源碼如下:
#include <stdio.h>#include <stdlib.h>
int main(){ long long a,b, m,t; long long ta, tb; scanf("%lld%lld", &a, &b); if (a > b) { t = a; a = b; b = t; } ta = a, tb = b; if (ta < 0) ta = -ta; if (tb < 0) tb = -tb; if (ta == 0 || tb == 0) { printf("0\n"); return 0; } while (b) { t = b; b = a % b; a = t; } m = tb/a * ta; if (m < 0) m = -m; printf("%lld\n", m); return 0;}最後編譯運行:
測試1:
測試2:
測試3:
測試4:
謝謝您的支持!