我正在制作一个程序来计算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,我无法为此找到解决方案。
答案 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来弥补原始数字的长度。)