找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行,最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点表示,但应输出空格,而非小数点)。
样例输入:2357
样例输出:
<1>
..775
X..33
-----
.2325
2325.
-----
25575
The number of solutions = 1
#include<iostream>
#include<string>
#include<sstream>
#include<iomanip>
using namespace std;
string num2str(int i){
stringstream ss;
ss << i;
return ss.str();
}
int main(){
string str,tmp;
cin >> str;
int ok=1, x, y,z;
int count = 0;
for (int abc = 100; abc <= 999; abc++){
for (int de = 10; de <= 99; de++){
x = abc*(de % 10);
y = abc*(de / 10);
z = abc*de;
tmp = num2str(abc) + num2str(de) + num2str(x) + num2str(y) + num2str(z);
for (int i = 0; i < tmp.size(); i++){
if (str.find(tmp[i], 0) == string::npos){
ok = 0;
break;
}
else{
ok = 1;
}
}
if (ok){
count++;
string s = num2str(z);
int width = s.size();
cout << '<' << count << '>' << endl;
cout << setw(width) << abc << endl;
cout << 'X' << setw(width - 1) << de << endl;
cout << setw(width) << "-----" << endl;
cout << setw(width) << x << endl;
cout << setiosflags(ios::left)<<setw(width)<<y << endl;
cout << setw(width) << "-----" << endl;
cout << z << endl;
cout << endl;
}
}
}
cout << "The number of solutions = " <<count << endl;
system("pause");
return 0;
}
要通过此题学习string的一些操作,比如数字转字符串,字符串中字符的查找,还有格式化输出。