問題描述
求1+2+3+…+n的值。
輸入格式
輸入包括乙個整數n。
輸出格式
輸出一行,包括乙個整數,表示1+2+3+…+n的值。
樣例輸入
4樣例輸出
10樣例輸入
100說明:有一些試題會給出多組樣例輸入輸出以幫助你更好的做題。
一般在提交之前所有這些樣例都需要測試通過才行,但這不代表這幾組樣例資料都正確了你的程式就是完全正確的,潛在的錯誤可能仍然導致你的得分較低。
樣例輸出
5050
資料規模與約定
1 <= n <= 1,000,000,000。
說明:請注意這裡的資料規模。
本題直接的想法是直接使用乙個迴圈來累加,然而,當資料規模很大時,這種「暴力」的方法往往會導致超時。此時你需要想想其他方法。你可以試一試,如果使用1000000000作為你的程式的輸入,你的程式是不是能在規定的上面規定的時限內執行出來。
本題另乙個要值得注意的地方是答案的大小不在你的語言預設的整型(int)範圍內,如果使用整型來儲存結果,會導致結果錯誤。
如果你使用c++或c語言而且準備使用printf輸出結果,則你的格式字串應該寫成%i64d以輸出long long型別的整數。
#include
using
namespace std;
intmain()
%i64d這個是乙個完整的識別符號。表示_int64,也就是常說的long long型別。64位的整數。
不過有些編譯器不支援%lld, 只能用%i64d。
而%i64d, 這裡的%i是乙個型別,用於輸入整數。 後續的64d與它無關。
%i和%d都是表示有符號十進位制整數,但%i可以自動將輸入的八進位制(或者十六進製制)轉換為十進位制,而%d則不會進行轉換。
所以 可以說 %i64d是正確的。而%i64d是一種誤寫。
關於%i64d 和%ild還可以參考
另外,把這題也寫成部落格的原因還有(第一次測試的時候只對了一半,哭唧唧o(╥﹏╥)o) ,第一次測試的時候,n設定成了int型別,因為一開始考慮到1 <= n <= 1,000,000,000,而int型別可以表示十位數(以2開頭),為了節省空間,就用了int型。(錯就錯在這,o(╥﹏╥)o )
但是忘記了在計算sum=n*(1+n)/2的時候,由於右側為int型別,計算結果造成了精度丟失,進行強制型別轉化後自然也是錯誤的答案。
藍橋杯 基礎練習 序列求和
問題描述 求1 2 3 n的值。輸入格式 輸入包括乙個整數n。輸出格式 輸出一行,包括乙個整數,表示1 2 3 n的值。樣例輸入 4樣例輸出 10樣例輸入 100 說明 有一些試題會給出多組樣例輸入輸出以幫助你更好的做題。一般在提交之前所有這些樣例都需要測試通過才行,但這不代表這幾組樣例資料都正確了...
藍橋杯 入門訓練 序列求和
問題描述 求1 2 3 n的值。輸入格式 輸入包括乙個整數n。輸出格式 輸出一行,包括乙個整數,表示1 2 3 n的值。樣例輸入 4樣例輸出 10樣例輸入 100 說明 有一些試題會給出多組樣例輸入輸出以幫助你更好的做題。一般在提交之前所有這些樣例都需要測試通過才行,但這不代表這幾組樣例資料都正確了...
藍橋杯 入門訓練 序列求和
1.藍橋杯官網規定 c c 中怎樣使用64位整數?64位整數的型別為 long long 使用cin讀的操作為 cin x 使用cout寫的操作為 cout x 使用scanf讀的操作為 scanf i64d x 使用printf寫的操作為 printf i64d x i64d i不能小寫 i64d...