/*
**sprintf:输出到字符串,sprintf函数在我们完成其他数据类型转换成字符串类型的操作中应用广泛。
**函数原型:int sprintf( char *buffer, const char *format [, argument,...] );buffer是字符数组名;format是格式化字符串
** sprintf的返回值是字符数组中字符的个数,即字符串的长度,不用在调用strlen(s)求字符串的长度。
*/
/*
**strchr函数:char *strchr(char const *str,int ch);
**strchr函数找到后返回一个指向该位置的指针,如果不存在,返回一个NULL指针
*/
#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%10); y = abc*(de/10); z = abc*de;
sprintf(buf, "%d%d%d%d%d", abc, de, x, y, z);//buf数组每一个存储单元buf[i]只有一个数字
ok = 1;
/*字符串查找函数,*/
for(i = 0; i < strlen(buf); i++)
if(strchr(s, buf[i]) == NULL) ok = 0;//如果在buf数组里的数字在s数组即输入的数字集合中 ,检查是否是一个合格的竖式
//如果找到了,返回一个指针,不等于NULL,进入下一次循环判断,ok依然=1;
if(ok)
{
printf("<%d>\n", ++count);
printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n", abc, de, x, y, z);
}//打印竖式
}//for循环
printf("The number of solutions = %d\n", count);
return 0;
}