個位求和題解

2022-09-19 19:54:13 字數 1223 閱讀 3905

個位求和【增強版】

題目描述

將乙個整數區間內所有整數的個位相加並輸出。

輸入輸入2個int型別整數m和n(m<=n),m與n之間由空格隔開。

輸出將區間[m,n]內所有整數的個位相加並輸出。

樣例輸入

1 18

樣例輸出

81

ps:這一題我大一的時候寫過,同時也ac過,但是**風格確實太爛的而且有點臃腫,索性將其再寫了一遍

其實這題的話,就是乙個簡單的數學題,只要你能夠推出這個個位求和的公式,那麼你就能夠做出。

這裡我簡單的分析一下,對於給定區間的數m–n,其個位數可以分為m%10-9,0-9…0-9,0-n%10,對於中間的很多個0-9可以求出他們的和為45,對於左右兩邊的數字範圍其實也可以採取的方式是補齊0-9的區間,這樣就可以通過45這個特定值來計算

*左邊補齊的數和:left_sum=((left-1)left)/2.0

;右邊補齊的數和:right_sum=((right+10)*(9-right))/2.0;

那麼總的sum為:sum=cnt*45-left_sum-right_sum;

ok,在知道了這些就可以知道你需要求的sum和是多少了,然後根據n,m的正負來分段計算,同時注意本題只是計算個位數,所以均為正數

ps:建議不要照搬。

#include#includeusing namespace std;

long long sum(long long left,long long right,long long len)

if(right!=9)//計算右補齊

long long cnt=0;//表示有多少個45,

cnt=(len+left_len+right_len)/10;//算總個數

long long sum=0;

sum=cnt*45-left_sum-right_sum;

return sum;

}int main()

時間複雜度分析:o(1)

嗯,就是這樣,有啥建議or問題請私聊我

題解 P1630 求和

題目 發現題解都不夠優雅,就自己來一篇 首先,看清楚了,題目是 sum ai b 的餘數 而不是 sum ab i 等比數列求和了解一下 畢竟.本蒟蒻一開始就看錯了.好,進入正題,介於 a,b leq 10 9 暴力就想都不用想了,肯定過不了每一次乘法需要 o b 的時間,加法需要 o a 的時間,...

樹狀陣列 求和問題題解

題目 求和問題 描述 問題描述 在乙個長度為n的整數數列中取出連續的若干個數,並求它們的和。輸入格式 輸入由若干行組成,第一行有乙個整數n 第二行有n個整數 第三行有乙個整數m 下面m行,每行兩個整數i與j i j 表示求和的起始和終止位置。輸出格式 輸出有m行,每行乙個整數,表示這個數段數列的和。...

題解 CQOI2007 餘數求和

考慮到這個等式 a bmod b a b lfloor frac rfloor 所以我們可以得到 begin ans sum k bmod i sum k i lfloor frac rfloor end 我們可以證得若 lfloor frac rfloor 是相同的,則對應的b所取得的區間必然是連...