#include<stdio.h> #include<math.h> int main() { long long int l, r; int n; int cnt = 0; scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%lld%lld", &l, &r); cnt =(int) sqrt(r) - (int) sqrt(l); if(((int) sqrt(l))* ((int)sqrt(l))==l){ cnt++; } printf("%d\n", cnt); cnt = 0; } return 0; } 开始做这题·感觉有点坑,0这个数没考虑到,感觉好蠢,这题其实可以运用前缀和思想来写,可以先找到r以前的所有平方数,再找出l前所有的平方数,(这个用相减法时,如果l本身是一个平方数则加上这个平方数), 在判断这个数是否是平方数是可以用平方根来搞搞,被忘了加个int强制转换。