有人可以幫我弄清楚IT老師給我的一種干擾嗎? 我必須製作一個程序,計算一個數字中有多少個數字。例如:僅通過使用模數得到一個數字的長度
I輸入一個號碼100,並且該程序使我的3. 的輸出如果我輸入99,該程序使我2.
如何可以通過僅使用彈性模量達到這個( %)運算符,沒有別的,但數學計算。
有人可以幫我弄清楚IT老師給我的一種干擾嗎? 我必須製作一個程序,計算一個數字中有多少個數字。例如:僅通過使用模數得到一個數字的長度
I輸入一個號碼100,並且該程序使我的3. 的輸出如果我輸入99,該程序使我2.
如何可以通過僅使用彈性模量達到這個( %)運算符,沒有別的,但數學計算。
我認爲你的老師做了一小口舌頭。你這樣做平凡使用整數除法不模量:
就可以解決這個
int digits;
for (digits = 1; num /= 10; ++digits);
其中num
爲非負整數測試的一種方法。正如你所看到的,你不需要使用模數%
。即使您使用a % b = a - a/b * b
(對於非負整數a
和b
)的屬性(看起來您可以將分數替換爲%
),仍然會以重新排列的公式中的係數結束。
只能用模量和加法完成。 –
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;
}
'log'是一個數學計算。 – krzaq
你嘗試過什麼? SO不是代碼寫入服務。請閱讀[我可以在這裏問什麼問題?](http://stackoverflow.com/help/on-topic) – user463035818
這是相當人爲的。爲什麼你不能使用10的重複整數除法並且一旦數字爲零就停止? – Bathsheba