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;
} 展开
网上提交,显示时间超限,求大神帮忙看一下,怎么改。
#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;
} 展开
3个回答
展开全部
一、你这样时间肯定不够哦,用数学知识简化一下: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 应该属于大数计算范围了
~
~
另外,10^100000 应该属于大数计算范围了
~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
n太大了。如果n<10,程序应该没问题。
你自己算算,等差数列求和,如果从1加到1000,结果是6位数。你要从1加到10^n,运算结果是2n位数。你定义的s最大是多少?不到20位数吧。要用这个s来存储一个2万位数,显然是做不到的。
修改if语句为
if(n==-1||n>10),
然后去试试。
题目是不是错了,最后一项是n?
你自己算算,等差数列求和,如果从1加到1000,结果是6位数。你要从1加到10^n,运算结果是2n位数。你定义的s最大是多少?不到20位数吧。要用这个s来存储一个2万位数,显然是做不到的。
修改if语句为
if(n==-1||n>10),
然后去试试。
题目是不是错了,最后一项是n?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询