有人可以帮助我找出IT老师给我的练习吗? 我必须制作一个程序,计算一个数字中有多少位数。例如:
我输入一个数字100,程序给我输出3。 如果我输入99,程序会给我2。
我如何通过仅使用模数(%)运算符来实现这一点,而不是其他任何因素,而是数学计算。
答案 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;
}
答案 1 :(得分:0)
我认为你的老师说了一句话。你可以使用整数除法 而不是模数来实现这一点:
你可以解决这个问题的方法是
int digits;
for (digits = 1; num /= 10; ++digits);
其中num
是要测试的非负整数。如您所见,您不需要使用模数%
。即使您使用a % b = a - a / b * b
(对于非负整数a
和b
)的属性,看起来您可以替换%
的分区,您仍然会系数在重新排列的公式中。