我已经有了代码,我计算了1到最大范围之间的完美平方数:
int perfectCounter = 0;
int i = 1;
int maxRange;
scanf("%d", &maxRange);
while (i <= maxRange) {
float tempSquare = sqrt(i);
int integerPart = tempSquare;
if (tempSquare == integerPart)
perfectCounter++;
}
问题是,最大范围必须介于1到10 ^ 1000之间,因此我无法将maxRange存储在int,long或long double上。我不能考虑解决方案,不使用处理非常大数字的外部库。
答案 0 :(得分:3)
如果您只需计算 1..N
之间有多少完美正方形,您需要做的是:取N
的平方根并获取其整数值:)
想一想。对于1..10
范围,正确答案为3
(1
,4
,9
),顺便提一下,sqrt(10)
为1
。如果你不想把M..N
算作一个完美的正方形 - 那就不要算了。
一般来说,要查看范围(int)sqrt(N) - (int)sqrt(M) - 1
中有多少“完美广场”,您需要做的就是:
hr.style-six {
border: 0;
height: 0;
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-bottom: 1px solid rgba(255, 255, 255, 0.3);
}
这应该很简单,因为你现在需要做的就是获得“非常大的数字”的平方根。你必须写一个函数,真的。但它不是太复杂,网上有很多资源可以帮助你。
答案 1 :(得分:2)
任何范围之间的完美正方形数量没有强制执行
在您的情况下,10 ^ 1000的平方根是10 ^(1000/2)= 10 ^ 500。这意味着 10 ^ 500 完美的正方形。
对于任何其他范围,只要尝试使用算术来缩小它,然后使用modulo在int32寄存器中存储合理的值。
答案 2 :(得分:1)
如果您不想使用外部库,我建议您找到一种方法将数字存储在if
数组中。你必须编写自己的算术函数。
答案 3 :(得分:-1)
scanf("%d%d",&l,&u);
x=floor(sqrt(u))-ceil(sqrt(l))+1;
printf("%d\n",x);