舍入整数以始终以0

时间:2015-09-24 23:33:47

标签: c

我正在制作一个程序来计算1和另一个数之间的完美平方数,我希望计数器只取整数的第一个数,然后将0放在其余数上,例如:结果计算是31,我想显示30,如果它是190,那么显示100,依此类推。

int number;
int i = 1;
int perfectCounter = 0;

printf("Enter a number: ");
scanf("%d", &number);

while (i <= number) {
    float tempSquare = sqrt(i);
    int integerPart = tempSquare;

    if (tempSquare == integerPart)
       perfectCounter++;

    i++;
}

printf("%d", perfectCounter);

这就是我现在拥有的代码,如果我插入1000,它将显示31,我希望它显示30,我无法为此找到解决方案。

3 个答案:

答案 0 :(得分:2)

你可以使用像这样的函数来舍入你的数字。基本上它的作用是它和#34;筹码#34;一次一个数字,直到我们只剩下一个数字,然后向它添加适当数量的零:

int round(int _in){
    int numDigits = 0;
    while(_in > 9){
        ++numDigits;
        _in /= 10;
    }
    int res = _in;  // whatever is left would be the left-most digit
    for(int i = 0; i < numDigits; ++i){
        res *= 10;
    }
    return res;
}

答案 1 :(得分:2)

将数字除以数字下方的最高功率10。使用整数运算执行此操作,因此它获取除法的整数部分。然后乘以10的幂。

#include <math.h>

int powerOf10 = pow(10, (int)log10(perfectCounter));
int roundedCounter = (perfectCounter/powerOf10)*powerOf10;
printf("%d", roundedCounter);

答案 2 :(得分:0)

这是一个没有数学的简单解决方案:

void print_rounded(int i) {
  unsigned u = i;
  if (i < 0) { putchar('-'); u = -i; }
  char buf[2];
  int n = snprintf(buf, 2, "%u", u);
  for (putchar(buf[0]); --n; putchar('0')) {}
}

(换句话说,打印第一个数字,然后打印足够的0来弥补原始数字的长度。)