2013-07-23 23 views
0

對於給定數目增量單個數字(MSB)爲給定的整數

unsigned int a = 1203; 

增量最顯著十進制數字只所以上面的示例

a = 2203; 

如何才能實現這一目標?

我開始這樣

for (n=a; n; n/=10){ b = n%10;} 

這給MSB然後增加基礎B ++;

但未能恢復整數?

有沒有其他的選擇,比如& 0xf000給出了msb,但是整數可以是0到-INT_MAX範圍內的任何東西?

+0

整數溢出是執行相關的,你知道這個na? –

+3

這是一個非標準的MSB定義,通常意味着最高位(或字節),這絕對不是你所描述的。 – harold

+1

你的意思是「最重要的十進制數字」。基本上,你可以計算出多少位數,並根據該長度添加1/10/100/1000 /什麼。根據你想要得到多少花式,有幾種方法可以做到這一點。 –

回答

4

你實際上很接近。

int x = 1; 
for (n=a; n; n/=10) { 
    x *= 10; 
} 
a += x; 
+0

謝謝,小的更正,要麼我們必須減少10或循環應該是一個 在這裏檢查http:// ideone。 com/PL6TG2 –

+0

@czarx - 是的,我沒有仔細研究它。我覺得你已經足夠接近,以至於你可以弄清楚其餘部分,如果它不太對。 –

0

唯一的解決辦法是要弄清楚有多少位有(通常由10分 - 或任何基地) - 當你擁有最高的數字,把它加1,並重新組裝這個數字(或者找出哪個數字是最高位數的1,但你仍然需要知道你有多少位數字)。

1

沒有額外的變量Ñ的變體:

int x = 1; 
while (x <= a/10) x *= 10; 
a += x; 

(編輯)這應該更快略微的,因爲它在所述比較迴路移除d司和後它增加了僅單個之一:

int x = 1; 
while (x <= a) x *= 10; 
x /= 10; 
a += x; 
+0

謝謝我喜歡第二個 –