
思路:
一位大佬的思路:https://blog.youkuaiyun.com/hzf0701/article/details/108414450
这里记录一下自己的理解:
找进位点,即记录s的前缀和小于n的最大位置pos(注意9的进位),
如果
p
o
s
=
=
−
1
pos==-1
pos==−1,也就是s[0]就不满足小于n这个条件的话,输出
1
0
s
i
z
e
o
f
(
s
)
+
1
10^{sizeof(s)+1}
10sizeof(s)+1
如果
p
o
s
!
=
−
1
pos!=-1
pos!=−1,那么就把pos位置的值+1,并把pos位置后的数变0
然后就是两个好用的字符串和数值转换的函数啦,
to_string():将数值转换为字符串
stoll():将字符串转换为long long数值
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,s,t;
string str;
void solve() {
str = to_string(n);
int cnt=0,len=str.size(),pos=-1;
for(int i=0; i<len; i++) {
cnt+=(str[i]-'0');
if(str[i]=='9') continue;
if(cnt<s) pos=i;
}
if(cnt<=s) cout<<"0"<<endl;
else if(pos==-1) {
str="1";
for(int i=0;i<len;i++) str+="0";
cout<<(stoll(str)-n)<<endl;
}
else{
str[pos]++;
for(int i=pos+1;i<len;i++) str[i]='0';
cout<<(stoll(str)-n)<<endl;
}
}
int main() {
cin>>t;
while(t--) {
cin>>n>>s;
solve();
}
}
本文深入探讨了进位点算法的实现细节,该算法用于在给定数字和数字之和的条件下,找到最小的进位点,从而进行数值转换。文章通过具体的代码示例,详细解释了如何使用C++实现这一算法,包括字符串和数值之间的转换函数to_string()和stoll()的使用。
1201

被折叠的 条评论
为什么被折叠?



