仅使用模数获取数字的长度

时间:2016-10-03 12:31:52

标签: c++ functional-programming

有人可以帮助我找出IT老师给我的练习吗? 我必须制作一个程序,计算一个数字中有多少位数。例如:

我输入一个数字100,程序给我输出3。 如果我输入99,程序会给我2。

我如何通过仅使用模数(%)运算符来实现这一点,而不是其他任何因素,而是数学计算。

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(对于非负整数ab)的属性,看起来您可以替换%的分区,您仍然会系数在重新排列的公式中。