tyl555 发表于 2022-5-18 20:21:16

求序列平方和,感谢大佬了

本帖最后由 tyl555 于 2022-5-18 21:29 编辑

请编写程序,输入正整数 n,计算平方和n=1+2^2+3^2+......+n^2
输入格式
整数 n
注:n 在 int 类型范围内,格式限定符采用 %d。
输出格式
实数 s
在 double 类型范围内,格式限定符采用 %.15g
注:代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MBs 。
//我这样写时间超了
#include<stdio.h>
int main()
{
        int n,i,l;
        double s;
        scanf("%d",&n);
    for(i=1;i<=n;i++)
    s=s+(double)i*i;
        printf("%.15g\n",s);
        return 0;
}

人造人 发表于 2022-5-18 20:31:04

你这不是时间超了吧,你这是直接写错了吧?
题目要求一个加,一个减,一个加,一个减,。。。
你这整的全是加?

人造人 发表于 2022-5-18 20:32:15

还有,你的变量s没有初始化

人造人 发表于 2022-5-18 20:32:55

还有,你的变量l没有使用

人造人 发表于 2022-5-18 20:35:23

请编写程序,输入正整数 n,计算平方和n=1+2^2-3^2+......+n^2
这里是
n= 还是 s= ?

n=1+2^2-3^2+......+n^2
?
s=1+2^2-3^2+......+n^2
?

柿子饼同学 发表于 2022-5-18 20:43:45

平方差公式 : a ^ 2-b ^ 2 == (a+b) * (a-b)

tyl555 发表于 2022-5-18 21:26:04

人造人 发表于 2022-5-18 20:35
请编写程序,输入正整数 n,计算平方和n=1+2^2-3^2+......+n^2
这里是
n= 还是 s= ?


s=

tyl555 发表于 2022-5-18 21:27:52

人造人 发表于 2022-5-18 20:31
你这不是时间超了吧,你这是直接写错了吧?
题目要求一个加,一个减,一个加,一个减,。。。
你这整的全 ...

平方序列求和

风车呼呼呼 发表于 2022-5-18 21:53:01

以int型的最大正整数测试,运行时间在10~15毫秒以内
int main(void) {
        int n=0x7fffffff;
        printf("%d\n", n);
        double s = 0;
        //scanf("%d", &n);
        s = (double)n * (n + 1) * (2 * n + 1) / 6;
        printf("%15g\n", s);
        return 0;
}

tyl555 发表于 2022-5-19 12:09:48

风车呼呼呼 发表于 2022-5-18 21:53
以int型的最大正整数测试,运行时间在10~15毫秒以内

交上去,说有一个答案错了

风车呼呼呼 发表于 2022-5-19 12:14:35

tyl555 发表于 2022-5-19 12:09
交上去,说有一个答案错了

输出格式%.15g,少了个点你给加上

tyl555 发表于 2022-5-19 12:31:45

风车呼呼呼 发表于 2022-5-19 12:14
输出格式%.15g,少了个点你给加上

我加了的
#include<stdio.h>
int main(void) {
      int n=0;
      double s = 0;
      scanf("%d", &n);
      s = (double)n * (n + 1) * (2 * n + 1) / 6;
      printf("%.15g\n", s);
      return 0;
}

风车呼呼呼 发表于 2022-5-19 12:51:35

tyl555 发表于 2022-5-19 12:31
我加了的
#include
int main(void) {


有一个答案错了是什么意思,n的21亿种可能情况中只有一种情况的答案错了?

tyl555 发表于 2022-5-19 12:55:36

风车呼呼呼 发表于 2022-5-19 12:51
有一个答案错了是什么意思,n的21亿种可能情况中只有一种情况的答案错了?

我交到了pta上面的,交上去显示有一个错了,是不是我改错了
#include<stdio.h>
int main(void) {
      int n=0;
      double s = 0;
      scanf("%d", &n);
      s = (double)n * (n + 1) * (2 * n + 1) / 6;
      printf("%.15g\n", s);
      return 0;
}

风车呼呼呼 发表于 2022-5-19 13:28:22

本帖最后由 风车呼呼呼 于 2022-5-19 13:54 编辑

tyl555 发表于 2022-5-19 12:55
我交到了pta上面的,交上去显示有一个错了,是不是我改错了
#include
int main(void) {


单独声明一个double变量装 n
double t = (double)n;

如果不允许声明除s、n以外的变量,那就把式子里的每个n都强制转换一下,应该是括号里的溢出了
s = (double)n * ( (double)n + 1) * (2 *(double) n + 1) / 6;

更简洁的,可以这样写
s = n * (n + 1.0) * (2.0 * n + 1) / 6;

tyl555 发表于 2022-5-19 14:05:18

风车呼呼呼 发表于 2022-5-19 13:28
单独声明一个double变量装 n
double t = (double)n;



大佬666,对了
页: [1]
查看完整版本: 求序列平方和,感谢大佬了