對於給定數目增量單個數字(MSB)爲給定的整數
unsigned int a = 1203;
增量最顯著十進制數字只所以上面的示例
a = 2203;
如何才能實現這一目標?
我開始這樣
for (n=a; n; n/=10){ b = n%10;}
這給MSB然後增加基礎B ++;
但未能恢復整數?
有沒有其他的選擇,比如& 0xf000給出了msb,但是整數可以是0到-INT_MAX範圍內的任何東西?
對於給定數目增量單個數字(MSB)爲給定的整數
unsigned int a = 1203;
增量最顯著十進制數字只所以上面的示例
a = 2203;
如何才能實現這一目標?
我開始這樣
for (n=a; n; n/=10){ b = n%10;}
這給MSB然後增加基礎B ++;
但未能恢復整數?
有沒有其他的選擇,比如& 0xf000給出了msb,但是整數可以是0到-INT_MAX範圍內的任何東西?
你實際上很接近。
int x = 1;
for (n=a; n; n/=10) {
x *= 10;
}
a += x;
謝謝,小的更正,要麼我們必須減少10或循環應該是一個 在這裏檢查http:// ideone。 com/PL6TG2 –
@czarx - 是的,我沒有仔細研究它。我覺得你已經足夠接近,以至於你可以弄清楚其餘部分,如果它不太對。 –
唯一的解決辦法是要弄清楚有多少位有(通常由10分 - 或任何基地) - 當你擁有最高的數字,把它加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;
謝謝我喜歡第二個 –
整數溢出是執行相關的,你知道這個na? –
這是一個非標準的MSB定義,通常意味着最高位(或字節),這絕對不是你所描述的。 – harold
你的意思是「最重要的十進制數字」。基本上,你可以計算出多少位數,並根據該長度添加1/10/100/1000 /什麼。根據你想要得到多少花式,有幾種方法可以做到這一點。 –