neuq oj 1019: 求和again 並非求和題C++

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("%d\n",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;
}

及時轉換思路,注意數據超限
發佈了33 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章