代码如下
#include<bits/stdc++.h>
using namespace std;
long long n,k,ans;
string s,s2,s3[1000005];
bool b=0;
void dfs(long long num,long long num2,string s){
if(num>k){
return ;
}
for(int i=num2+1;i<n;i++){
ans++;
if(s[i]=='0'){
s[i]='9';
s3[ans]=s;
dfs(num+1,i,s);
s[i]='0';
}
else {
s[i]--;
s3[ans]=s;
dfs(num+1,i,s);
s[i]++;
}
}
}
void dfs2(long long num,long long num2,string s){
if(num>k){
return ;
}
for(int i=num2+1;i<n;i++){
ans++;
if(s[i]=='9'){
s[i]='0';
s3[ans]=s;
dfs(num+1,i,s);
s[i]='9';
}
else {
s[i]++;
s3[ans]=s;
dfs(num+1,i,s);
s[i]--;
}
}
}
int main() {
cin>>n;
cin>>s;
cin>>k;
if(s.size()<n){
for(int i=1;i<=n-s.size();i++){
s2+='0';
}
s2+=s;
s=s2;
}
s2=s;
dfs(1,-1,s2);
dfs2(1,-1,s2);
ans++;
s3[ans]=s2;
sort(s3+1,s3+ans+1);
for(int i=1;i<=ans;i++){
if(s3[i]!=s3[i-1]){
b=1;
for(int j=0;j<n;j++){
if(b==1&&s3[i][j]=='0'&&j==n-1){
cout<<0;
}
if(b==1&&s3[i][j]!='0'){
b=0;
}
if(b==0){
cout<<s3[i][j];
}
}
cout<<endl;
}
}
return 0;
}
另外试问,如果经过变换后为0,还要输出吗?