首頁>技術>

首先,給出c語言和python同一語義的不同表達方式,然後再使用c語言和python分別解LeetCode題:LeetCode7.翻轉整數。

C語言和Python中的整除“/”和取餘“%”

c語言:7 / 4 = 1Python:7 // 4 = 1 //Python中 7 / 4 = 1.75 表示浮點數除法;雙斜槓 //表示整數除法

再看一下符號對整除是否有影響:

c語言:                   python: 7 / 4 = 1                 7 // 4 = 1   -7 / 4 = -1	          -7 // 4 = -27 / -4 = -1                7 // -4 = -2-7 / -4 = 1                 -7 // -4 = 1

可以看出,除數和被除數符號不同時,計算結果是不同的。

再看一下,取餘C語言和python是否有區別:

c語言:                         python: 7 % 4 = 3                     7 % 4 = 3  -7 % 4 = -3	               -7 % 4 = 17 % -4 = -3                   7 % -4 = -1-7 % -4 = -3                 -7 % -4 = -3

可以看出,除數和被除數符號不同時,計算結果是不同的。

結論:

當除數與被除數符號一致時,整除和 取餘運算在c語言和python中所得結果是一樣的;

當除數與被除數符號不一致時,注意調整python中符號。

整除時,除數和被除數符號不一致時,調整完除數的符號時,要根據結果看是否調整最後結果的符號;

取餘時,除數和被除數符號不一致時,由於結果與除數符號相同,只需要調整除數符號即可。

C語言和Python中的“與或非”

C語言: 或 ||   與&&if (ans > IntMax / 10 || (ans == IntMax / 10 && pop > IntMax % 10)) return 0;if (ans < IntMin / 10 || (ans == IntMin / 10 && pop < IntMin % 10)) return 0;Python: 或or  與andif ans > IntMax // 10 or (ans == IntMax // 10 and pop > IntMax % 10):     return 0 if ans < -(IntMin // -10) or (ans == -(IntMin // -10) and pop < IntMax % -10):     return 0

C語言和Python中的32位最大整數

C語言:#define INTMAX  ((unsigned)(-1)>>1)#define INTMIN  (~INTMAX)Python://Python沒有宏定義 IntMax = 2 ** 31 - 1//指數^用**表示 IntMin = -2 ** 31

LeetCode7.整數翻轉

給你一個 32 位的有符號整數 x ,返回 x 中每位上的數字反轉後的結果。如果反轉後整數超過 32 位的有符號整數的範圍 [−2^31, 2^31 − 1] ,就返回 0。假設環境不允許儲存 64 位整數(有符號或無符號)。

示例 1:

輸入:x = 123

輸出:321

示例 2:

輸入:x = -123

輸出:-321

示例 3:

輸入:x = 120

輸出:21

示例 4:

輸入:x = 0

輸出:0

思路分析:

我們可以一次構建反轉整數的一位數字。在這樣做的時候,我們可以預先檢查向原整數附加另一位數字是否會導致溢位。反轉整數的方法可以與反轉字串進行類比。我們想重複“彈出” x 的最後一位數字,並將它“推入”到 ans 的後面。最後,ans 將與 x 相反。要在沒有輔助堆疊 / 陣列的幫助下 “彈出” 和 “推入” 數字,我們可以使用數學方法。

彈出:int pop = x % 10;x /= 10; 推入:ans = ans * 10 + pop;

但是,這種方法很危險,因為當ans = ans * 10 + pop; 時會導致溢位。但是我們可以事先檢查這個語句是否會導致溢位很容易。在程式碼ans = ans * 10 + pop;前邊加入檢查:

if ans > IntMax // 10 or (ans == IntMax // 10 and pop > IntMax % 10):     return 0if ans < -(IntMin // -10) or (ans == -(IntMin // -10) and pop < IntMax % -10):      return 0

下邊給出C語言和python 的完整程式碼:

c語言:

#include<stdio.h>#include<stdlib.h>#define INTMAX  ((unsigned)(-1)>>1)#define INTMIN  (~INTMAX)int reverse(int x){    int ans = 0;    int IntMax = INTMAX;    int IntMin = INTMIN;    while (x != 0)    {       int pop = x % 10;       x /= 10;       if (ans > IntMax / 10 || (ans == IntMax / 10 && pop > IntMax % 10)) return 0;       if (ans < IntMin / 10 || (ans == IntMin / 10 && pop < IntMin % 10)) return 0;       ans = ans * 10 + pop;    }    return ans;}int main(){    int x = -2147483647;    int ans = reverse(x);    printf("%d\n", ans);    return 0;}

Python:

9
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Java簡訊驗證碼介面程式碼實現