飞飞特别喜欢平方数,可是他数学并不好,你能帮他计算n与m之间所有平方数之和吗?
提示:若一个整数的开方还是整数,它就是平方数。例如:4、9、16、25是平方数。
第一行 T 代表数据的组数。
接下来有 T 行,每行两个整数n,m (0 < n, m <= 1000000)
Output输出一个整数,代表所求区间内平方数之和。
Example Input 31 43 1017 20 Example Output 5130 之前出的问题是sum未归零,正确的程序如下: 01#include <stdio.h> 02#include <stdlib.h> 03#include <math.h> 04int main() 05{ 06 int n, a, b, t, i, m, sum = 0; 07 scanf("%d", &n); 08 while(n--) 09 { 10 sum = 0; 11 scanf("%d%d", &a, &b); 12 if(a > b) 13 { 14 t = a; a = b; b = t; 15 } 16 for(i = a; i <= b; i++) 17 { 18 m = sqrt(i); 19 if(m * m == i) 20 { 21 sum = sum + i; 22 } 23 } 24 printf("%dn", sum); 25 } 26 27 28 return 0; 29 两种方法,一种是先开方,在平方,若还是原来的数,说明该数是平方数。另一种是循环嵌套,比如要判断i是不是平方数,我们从1到i去找,看看有没有一个数j,使得j*j = i。 01#include <stdio.h> 02#include <stdlib.h> 03#include <math.h> 04int main() 05{ 06 int n, a, b, t, i, j, sum = 0; 07 scanf("%d", &n); 08 while(n--) 09 { 10 sum = 0; 11 scanf("%d%d", &a, &b); 12 if(a > b) 13 { 14 t = a; a = b; b = t; 15 } 16 for(i = a; i <= b; i++) 17 { 18 for(j = 1; j <= i; j++) 19 { 20 if(j * j == i) 21 { 22 sum = sum + i; 23 } 24 } 25 } 26 printf("%dn", sum); 27 } 28 29 30 return 0; 31} 加油~!