chenyu


私信TA

用户名:17738377482

访问量:38241

签 名:

像风明天就会来一样期待,像风永远不会来一样生活

等  级
排  名 66
经  验 10056
参赛次数 18
文章发表 99
年  龄 0
在职情况 学生
学  校 HCU
专  业

  自我简介:

解题思路:

    思路没什么好说的,不考虑时间复杂度的话可以循环加递归求和求解。第二种是利用阶乘求和的性质,避免重复运算达到时间复杂度的优化。


    直接上手第二种,边求阶乘边求和。

    

注意事项:


    百分之五十错误的代码基本都是定义的变量范围过小,导致部分大数的程序产生错误。诸如int , float ,double都会超范围。

    直接告诉大家,一般大数或者大数组,直接开全局变量或者是用 long long 类型,此题用 long long或者是long double 类型可以完美AC。

    附上各变量范围:

        整型[signed]int                  -2147483648~+2147483648
        无符号整型unsigned[int]                       0~4294967295
        短整型 short [int]                                    -32768~32768
        无符号短整型unsigned short[int]             0~65535
        长整型 Long int                            -2147483648~+2147483648
        无符号长整型unsigned [int]                   0~4294967295
        字符型[signed] char                               -128~+127
        无符号字符型 unsigned char                       0~255
        单精度 float                                 3.4 x 10^(-38)~  3.4 x 10^(+38)
        双精度double                              1.7 x 10^(-308)~  1.7 x 10^(+308)
        长双精度 long double                 1.7 x 10^(-308)~  1.7 x 10^(+308)


参考代码:

        

    #include<bits/stdc++.h>

using namespace std;

int main()
{
 int n;
 long long sn = 1;
 long long sum = 0;
 cin>>n;
 for(int i = 1; i <= n; i++)
 {
  sn = sn * i;
  sum = sum + sn;

 }
 printf("%0.lld",sum);
    return 0;
}


 

0.0分

19 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区

可我long int为什么还是错误50?
2021-01-15 00:54:43
谢谢你!
2020-05-27 15:03:11
#include<stdio.h>
int n=0;
long long  f(n)
{
	if (n == 1 || n == 0)
		return 1;
	else
		return f(n - 1)*n;
}
long long  s(n)
{
	if (n == 1)
		return 1;
	else
		return s(n - 1) + f(n);
}
int main()
{
	scanf("%d", &n);
	if (n <= 20)
	{
		printf("%d", s(n));
	}
	return 0;
}
求大佬康康我,运行没有问题,也改成长整型了,可还是错了
2020-05-27 14:48:52
#include<iostream>
using namespace std;
int main()
{
	int fac(int n);
    int n;
    int i;
    long long Sn=0;
    cin>>n;
    while(n>20)
    {
        cout<<"输入错误请重新输入20以内的整数";
        cin>>n;
    }
    for(i=1;i<=n;i++)
    {
    	Sn=Sn+fac(i);
	}
    cout<<Sn;
    return 0;
}

int fac(int n)
{
    if(n==1)
    {
        return 1;
    }
    else
    return n*fac(n-1);
}

为啥还是错误50% 有大神看看吗
2020-02-20 09:22:24
#include <stdio.h>
int main()
{
	int i=0,j=0,n=0;
	long long int Sn=0,m=1;
	scanf("%d",&n);
	for(j=n;j>0;j--)
	{
		m=1;
		for(i=j;i>0;i--)
		{
			m=m*i;
		}
		Sn=Sn+m;
	}
	printf("%d",Sn);
	return 0;
}
变量范围已经改过了,为什么还是50%的错误,是内存超范围了吗?怎么检查内存有没有超出范围?
2020-01-16 02:18:34
  • «
  • 1
  • »