题解:
这是一类题,叫做移除掉A的某一位后,再*******
其实也就是个数学题:
设删掉的位是第k+1位,(k从0到len-1,最右边为第一位)
那么有A=a*pow(10,k+1)+b*pow(10,k)+c
B=a*pow(10,k)+c
则N=A+B等于 (11a+b)*pow(10,k)+2c
然后简单了,枚举k,用N去÷10^k
然后对结果/11得到a,%11得到b,再用n-pow(10,k+1)*a*11-b*pow(10,k)得到2c
然而,小雪人眉头一皱,发现事情并不简单
万一。。c进位了呢?
所以要分情况讨论:1.c不进位,那么b就是b,2.c进位,那么b=b-1
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<set>
using namespace std;
int main(){
int n,i,k,a,b,c;
while(cin>>n,n){
set<int> con;
for(k=1;k<=n;k*=10){
a=(n/k)/11;
//无进位
b=(n/k)%11;
if(b<10&&(a!=0||b!=0)){
c=n-a*11*k-b*k;
if(c%2==0){
con.insert(a*k*10+b*k+c/2);
}
}
//有进位
b=(n/k)%11-1;
if(b>=0&&(a!=0||b!=0)){
c=n-a*11*k-b*k;
if(c%2==0){
con.insert(a*k*10+b*k+c/2);
}
}
}
if(con.size()==0){
cout<<"No solution."<<endl;
continue;
}
i=0;
for(set<int>::iterator index=con.begin();index!=con.end();index++,i++){
printf("%d%c",*index,i==con.size()-1?'\n':' ');
}
}
return 0;
}