Problem Description
飞飞特别喜欢平方数,可是他数学并不好,你能帮他计算n与m之间所有平方数之和吗?
提示:若一个整数的开方还是整数,它就是平方数。例如:4、9、16、25是平方数。
Input
第一行 T 代表数据的组数。
接下来有 T 行,每行两个整数n,m (0 < n, m <= 1000000)
Output
输出一个整数,代表所求区间内平方数之和。
Example Input
3 1 4 3 10 17 20
Example Output
5 13 0
代码:
#include <stdio.h> #include <math.h> int main() { int n, m, j, i, z, t, sum; scanf("%d",&z); while(z--) { scanf("%d%d",&n,&m); if(n>m) {t=n;n=m;m=t;} sum=0; for(i=n; i<=m; i++) { for(j=1; j<=sqrt(i); j++) { if(j*j==i) { sum=sum+i; break; } } } printf("%d\n",sum); } return 0; }
感悟:1.注意表示平方数的方法。i*i=j。
2.double类型不能做比较。浮点型不能作比较。
3.如果a是int型,sqrt(a)仍然是int型。如:sqrt(3)=1.
做的时候在sum=sum+a的位置出了问题,还多设了一个变量。巨巨告诉我多余了。还有位置也放得不对,仍需要多练几遍。
ps:来自巨巨的话:人还是要有梦想,即使是咸鱼,也要做最咸的那条。加油啊~
下面是第一次写这个代码的想法,虽然a变量有些多余,但里面的很多东西还是值得我学习的。比如说:a要设初变量,a=0的位置。
代码:#include <stdio.h> #include <math.h> int main() { int n, m,a, j, i, z, t, sum; scanf("%d",&z); while(z--) { scanf("%d%d",&n,&m); if(n>m) {t=n;n=m;m=t;} sum=0; for(i=n; i<=m; i++) { a=0; for(j=1; j<=sqrt(i); j++) { if(j*j==i) { a=i; break; } } sum=sum+a; } printf("%d\n",sum); } return 0; }
a=0要放到for循环里面,若放到while下,则i=1时,a=1;那么以后没进行一次循环,a=1都加一次。