关于竖式问题,我的C++解法如下:
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
using namespace std;
string num2str(int i)
{
stringstream ss;
ss<<i;
return ss.str();
}
int main()
{
int abc, de, x, y, z, ok, counter = 0;
string s, check;
cin >> s;
for( abc = 111; abc <1000; abc++ )
for( de = 11; de< 100; de++ )
{
x = (abc*de);
y = (de/10*abc);
z = (de*abc);
check = num2str(abc) +num2str(de) + num2str(x) + num2str(y) + num2str(z);
for( int i = 0; i< check.size(); i++ )
{
if( s.find(check[i],0)== string::npos )
{
ok =0;
break;
}
else
ok =1;
}
if(ok)
{
cout<< "<"<< ++counter<< ">"<< endl;
cout<< setw(5)<< abc<< endl;
cout << left<< "X"<< setw(4)<< right<< de<< endl;
cout<< setw(5)<< "-----"<< endl;
cout<< setw(5)<< z <<endl;
cout<< setw(4)<< y <<endl;
cout<< setw(5)<< "-----"<< endl;
cout<< setw(5)<< x <<endl;
}
}
cout << "The number of solutions= " << counter<< endl;
return 0;
}
刘汝佳的C语言解法如下:
#include<stdio.h>
#include<string.h>
int main(){
int i, ok, abc, de, x, y, z, count =0;
char s[20], buf[99];
scanf("%s", s);
for(abc = 111; abc <= 999;abc++)
for(de = 11; de<= 99; de++) {
x =abc*(de); y = abc*(de/10); z = abc*de;
sprintf(buf, "%d%d%d%d%d", abc, de, x, y, z);
ok =1;
for(i= 0; i < strlen(buf); i++)
if(strchr(s, buf[i]) == NULL) ok = 0;
if(ok) {
printf("<%d>\n",++count);
printf("]\nXM\n-----\n]\nM\n-----\n]\n\n", abc,de, x, y, z);
}
}
printf("The number of solutions = %d\n",count);
return 0;
}