面試題 整數逆向

2021-09-27 10:22:30 字數 917 閱讀 5104

例如:輸入12345——輸出54321           輸入3450——輸出543

輸入3450——輸出543

類似於字串的反轉一樣,可以借助棧來實現。但是這樣會建立額外的空間,造成不必要的浪費。所以採用數學方法,來解決這道題。

首先考慮的是,給定乙個整數x,將x%10,得到的餘數正好是該整數的最後一位。 再將整數x/10,就能得到除剛才求餘除外的數。再將得到的數求餘,就會得到上一位整數的最後一位數。舉個例子,整數1234,1234%10=4,得到最後一位數。1234/10=123,再將123%10=3,然後將前一位得到的數4*10+3=43,反覆如此操作,就能得到反轉後的數字。

但是有一點要考慮,就是反轉之後的數字可能會溢位,其中包括正整數和負整數。我們就需要找出溢位的時刻出現在什麼階段。還是給定乙個整數1234,假設int型別的最大上限是4310(打個比方),但是1234反轉之後是4321,很明顯溢位了。按照上面的方法反轉。正好是在12%10=2,12/10=1,前面求的值是43,再繼續計算下去,43*10+2=432。在這個時候就得要判斷與4310/10=431的大小,很明顯432是溢位了,因為在432*10+求出的餘數是大於431*的,所以在計算到倒數第二位就應該判斷是否溢位。

package cn.mrlij.algorithm;

public class reverseint

/*** 整數反轉

* @param target 目標整數

* @return

*/public static int reverseint(int target)

if(target < min || (target == min && pop res = res * 10 +pop;

}return res;

}}

面試題 整數取反

完成函式reverse,要求實現把給定的乙個整數取其相反數的功能,舉兩個例子如下 x 123,return 321 x 123,return 321 位址是我提交的 是 reverseintergertest.cpp 定義控制台應用程式的入口點。include stdafx.h include in...

面試題 調整陣列順序

題目 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分。首先這個題目只要求把奇數放前面,偶數放後面,所以我們不需要關注其他太多的因素,我們只需要給兩個指標,讓他們乙個指向最後乙個元素,這個指標只向前移動,乙個指向第乙個元素,這個指標...

面試題 數值整數次方

實現函式double power double base,int exponent 求base的exponent次方。不得使用庫函式,同時不需要靠考慮大數問題。看到這個問題,我覺得我跟大多數人想的是一樣,直接迴圈作乘法。但是仔細一想,考慮的還是太少了。從底數和指數兩方面分別考慮 有這麼幾種情況我們不...