【问题描述】
黑板上写有一个位数不超过100的自然数,这个数的各位数字之和不小于给定的数 𝑘。但是,由于你分心了,有人将这个数改成了另一个数 𝑛,改变了其中的一些数字。已知这个数的长度没有改变。
你需要找出这两个数至少有几个不同的数字。
【输入形式】
第一行包含一个整数 𝑘(1≤𝑘≤109)
第二行包含一个整数 𝑛
【输出形式】
输出两个数至少有几个不同的数字。
【样例输入1】
3 11
【样例输出1】
1
【样例输入2】
3 99
【样例输出2】
0
【样例说明】
在第一个示例中,最初的数可能是 12。
在第二个示例中,𝑛的各位数字之和已经不小于 𝑘。最初的数可以等于 𝑛。
完整代码:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int k=0,sum=0;
cin >> k;
string s;//必须用string转换,long long int不够
cin >> s;
int le=s.size();
vector<int> eachnum;
for (int i=0; i<le; i++)
{
eachnum.push_back(s[i]-'0');
sum+=(s[i]-'0');
}
sort(eachnum.begin(),eachnum.end());
if (sum>=k) cout << 0;
else
{
int j=0;
k-=sum;
while(k>0)
{
k-=(9-eachnum[j]);//因为要“至少”,所以从最小的开始补至9
j++;
}
cout << j;
}
return 0;
}