c++题目,计算SUM(n) = 1 + 2 + 3 + ... + 10^n。满足n<=100 000。

输入包含多组数据,每组数据一行,包括一个整数n(n<=100000)。当n=-1时输入终止网上提交,显示时间超限,求大神帮忙看一下,怎么改。#include<iostre... 输入包含多组数据,每组数据一行,包括一个整数n(n<=100 000)。当n=-1时输入终止
网上提交,显示时间超限,求大神帮忙看一下,怎么改。
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int main()
{
int i,n;
long long s;
while(cin>>n)
{
if(n==-1||n>100000)
break;
else
{
s=0;
for(i=1;i<=(pow(10,n));i++)
s=s+i;
cout<<s<<endl;
}
}
return 0;
}
展开
 我来答
阳光上的桥
2016-11-21 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21423 获赞数:65814
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部

一、你这样时间肯定不够哦,用数学知识简化一下:1+2+3+.....+n=n*(n-1)/2


二、题目要求n可以为100000,那么求和需要到10^100000这么大的数,double也存不了的,double只到10^307。这个要看题目的场所,如果是初学者考试,你就用long或者double去交差,如果是考智商的题目,那么需要使用特殊数据结构来存储结果。


按照题目,SUM(n)最大结果(n=10万)为【e+10万*(e+10万-1)/2】的数量级是e+20万,精确存储已经不大可能了,哪怕是使用万进制数表示,也需要5万位。只能使用自定义浮点数来表示:

struct bigfloat{
   double base;//底数
    double power;//指数
}

然后编写一些函数来实现此类数据的赋值、乘法、加法、输出,当然也可以用类来实现。

匿名用户
2016-11-21
展开全部
每次都计算 10^n 当然不合适

~

另外,10^100000 应该属于大数计算范围了

~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友07ab3aa
2016-11-21 · TA获得超过1343个赞
知道小有建树答主
回答量:561
采纳率:90%
帮助的人:75.2万
展开全部
n太大了。如果n<10,程序应该没问题。
你自己算算,等差数列求和,如果从1加到1000,结果是6位数。你要从1加到10^n,运算结果是2n位数。你定义的s最大是多少?不到20位数吧。要用这个s来存储一个2万位数,显然是做不到的。
修改if语句为
if(n==-1||n>10),
然后去试试。

题目是不是错了,最后一项是n?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式