概述
1019: 求和again
时间限制: 5 Sec 内存限制: 128 MB提交: 617 解决: 84
[ 提交][ 状态][ 讨论版]
题目描述
在1011题中大家已经解决了谷学长的疑问,成功的使他重新振作起来。不过最近谷学长又遇到了更麻烦的问题,为了使他不再低迷,你能帮帮他吗?
题目是这样的:计算SUM(n) = 1 + 2 + 3 + ... + 10^n。满足n<=100 000。
输入
输入包含多组数据,每组数据一行,包括一个整数n(n<=100 000)。当n=-1时输入终止。
输出
对于每个n输出相应的和。
样例输入
1
2
-1
样例输出
55
5050
提示
人家……人家真的不是求和题啦 喵~
代码
#include<iostream>
using namespace std;
int main()
{
int i,n;
while (cin>>n)
{
if(n==-1) return 0;
if(n==0)
{
cout<<"1"<<endl;
//continue;
}
else
{
cout<<"5";
for(i=1;i<n;i++)
{cout<<"0";}
cout<<"5";
for(i=1;i<n;i++)
{cout<<"0";}
cout<<endl;
}
}
return 0;
}
体会:
做这道题时,我没有看懂提示,进行了常规解决
以下两种方法理论上正确,但由于数据超限导致大数据计算有误,时间超限
法一:
#include<math.h>
#include<stdio.h>
int main()
{
int i,n;
long s=0;
while(scanf("%d",&n))
{
if(n==-1||n>100000)
break;
else
{
s=0;
for(i=1;i<=(pow(10,n));i++)
{
s=s+i;
}
printf("%dn",s);
}
}
return 0;
}
法二:
#include<iostream>
#include<math.h>
#include<stdio.h>
using namespace std;
int main()
{
int i,n;
while (cin>>n)
{
int sum=0;
if(n!=-1&&n<=100000)
{
for(i=1;i<=(pow(10,n));i++)
{
sum=sum+i;
}
cout<<sum<<endl;
}
else
{
return 0;
}
}
return 0;
}
法一:
#include<math.h>
#include<stdio.h>
int main()
{
int i,n;
long s=0;
while(scanf("%d",&n))
{
if(n==-1||n>100000)
break;
else
{
s=0;
for(i=1;i<=(pow(10,n));i++)
{
s=s+i;
}
printf("%dn",s);
}
}
return 0;
}
法二:
#include<iostream>
#include<math.h>
#include<stdio.h>
using namespace std;
int main()
{
int i,n;
while (cin>>n)
{
int sum=0;
if(n!=-1&&n<=100000)
{
for(i=1;i<=(pow(10,n));i++)
{
sum=sum+i;
}
cout<<sum<<endl;
}
else
{
return 0;
}
}
return 0;
}
事实证明,本题并非常规求和题,大数据如何处理,可转换思路,根据结果找规律来处理本题。
#include<iostream>
using namespace std;
int main()
{
int i,n;
while (cin>>n)
{
if(n==-1) return 0;
if(n==0)
{
cout<<"1"<<endl;
//continue;
}
else
{
cout<<"5";
for(i=1;i<n;i++)
{cout<<"0";}
cout<<"5";
for(i=1;i<n;i++)
{cout<<"0";}
cout<<endl;
}
}
return 0;
}
及时转换思路,注意数据超限
最后
以上就是阔达老鼠为你收集整理的neuq oj 1019: 求和again 并非求和题C++的全部内容,希望文章能够帮你解决neuq oj 1019: 求和again 并非求和题C++所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复