2016-10-03 55 views
-9

有人可以幫我弄清楚IT老師給我的一種干擾嗎? 我必須製作一個程序,計算一個數字中有多少個數字。例如:僅通過使用模數得到一個數字的長度

I輸入一個號碼100,並且該程序使我的3. 的輸出如果我輸入99,該程序使我2.

如何可以通過僅使用彈性模量達到這個( %)運算符,沒有別的,但數學計算。

+0

'log'是一個數學計算。 – krzaq

+1

你嘗試過什麼? SO不是代碼寫入服務。請閱讀[我可以在這裏問什麼問題?](http://stackoverflow.com/help/on-topic) – user463035818

+0

這是相當人爲的。爲什麼你不能使用10的重複整數除法並且一旦數字爲零就停止? – Bathsheba

回答

0

我認爲你的老師做了一小口舌頭。你這樣做平凡使用整數除法模量:

就可以解決這個

int digits; 
for (digits = 1; num /= 10; ++digits); 

其中num爲非負整數測試的一種方法。正如你所看到的,你不需要使用模數%。即使您使用a % b = a - a/b * b(對於非負整數ab)的屬性(看起來您可以將分數替換爲%),仍然會以重新排列的公式中的係數結束。

+0

只能用模量和加法完成。 –

2
uint num=/* your input */; 

// that's the number of digits required to print 
// num in base 10; 
uint ceil_log10 = 1; 
for(uint i = 10; num > 10; i = i*10) { 
    num -= (num % i); 
    ceil_log10++; 
} 

任何數字< 10需要一個數字。

任何數字>= 10將進入循環,這將消除從最少到最有效數字(使用模數)的數字,直到沒有剩餘。

如果不允許用乘法,可以通過重複添加替代它:

uint num=/* your input */; 

// that's the number of digits required to print 
// num in base 10; 
uint ceil_log10 = 1; 
for(uint i = 10; num > 10; /* no multiplication 4 you!! i = i*10 */) { 
    num -= (num % i); 
    ceil_log10++; 

    uint nextPower10=i; 
    for(int j=0; j<9; j++) { 
    nextPower10+=i; 
    } 
    i=nextPower10; 
} 
+0

是的,很好。 Upvoted。 – Bathsheba

+0

如果你不能使用乘法,爲什麼你會認爲你可以使用加法?無論如何,問題並不清楚,因爲「數學計算」包含任何可以想象的計算。 – naomik

相關問題