g - 這麼短的題面一定不會很難吧
description
你有乙個整數 nn 和 ss 。一步中你可以使 nn 增加 11(n= n+1n=n+1)。找到最小步數使得 nn 的每一位加起來小於或等於 ss。
input
第一行包含乙個整數 tt (1\le t\le 2·10^41≤t≤2⋅10
4)——測試資料組數。隨後有t組測試資料
每組測試資料報含兩個整數 nn 和 ss (1\le n\le 10^;1\le s \le 162)(1≤n≤10
15;1≤s≤162)。
output
每組測試資料輸出答案:將n變為每一位數字的和小於等於 ss 的最小步數。
sample
input
52 1
1 1500 4
217871987498122 10
100000000000000001 1
output80
5002128012501878
899999999999999999
hint
對於第三組資料:n = 500 + 500 = 1000 => 1+0+0+0<4n=500+500=1000=>1+0+0+0<4
貪心題目
1.首先判斷所有位數加起來是否小於等於n,並且把所有的位數的數存進陣列裡;
若等於,直接輸出0;
2.從高位數開始判斷,若sum>=m;進製,並且後面的位數全部變成0,生成乙個新的數字;
3.最後最初的數字減去這個新生成的數字就是答案;在這裡插入**片
#include
using
namespace std;
#define ll long long
intmain()
; cin>>s>>m;
int sum=0;
int len=0;
long
long
int t=s;
while
(s)//判斷是否相同並且存進陣列
if(sum=
=m) cout<<
"0"
if(flag) b[
++len1]=0
;else b[
++len1]
=a[i];}
//若sum>=m,進製,並且後面所有的位數全為0;9進製變成10不影響;
for(
int i=
0;i<=len1;i++
) cout
}
總結
一般遇到這種型別,數字轉換,1e10以上,可以考慮用陣列存,然後在進行解決。
c 這麼短的題面一定不會很難吧
description 你有乙個整數n和s。一步中你可以使n增加1 n n 1 找到最小步數使得n的每一位加起來小於或等於s。lnput 第一行包含乙個整數t 1521 115004 217871987498122 10100000000000000001 1output 8 0500 212801...
你們,一定不會丟下我
前些天,我乘汽車回娘家。大清早就買了車票,坐在車上等待,車上也有不少焦急等待的乘客。不時有心急的人下車察看一番,試圖尋找司機的蹤影,而後無奈地搖搖頭,急切地看看手錶,打打手機。從朝陽初公升,一直等到日上中天,還是不見司機來開車。夏日的驕陽蒸得車廂內漸漸悶熱,不耐煩的人們開始紛紛抱怨。人們的心情也像那...
某人一定不會的 重口味線段樹
注意求m的地方 for m 1 m n 1 m 2 爭論了半天的n後面是否 1 是否進行越界處理 後來得出的結論是 1,浪費空間 不加,遇到特殊情況有安全隱患,但證明,對於t,如果為偶數,則不進行處理,所以,可以不加.1 int query int s,intt 7 return ans 8 9vo...