题目:
竖式问题
找出所有形式如abc*de(三个数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合,输入数字集合(相邻数字之间没有空格),输出所有竖式,每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样列输出(为了便于观察,竖式中的空格改用小数点显示,但实际的程序应该输出空格,而非小数点)。
样例输入;2357
样例输出;
<>
775
X.33
____
2325
2325
____
25575
The number of solutions=1
代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
int abc,de ;
int x,y,z;
char s[20],buf[99];
int count = 0;
int ok = 1;
int i;
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);
ok = 1;
for(i = 0; i < strlen(buf); i++)
{
//printf("%c ",buf[i]);
if(strchr(s,buf[i]) == NULL)
{
ok = 0;
}
}
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);
}
}
}
printf("numbers of solutions: %d\n",count);
return 0;
}
sprintf:
原型
int sprintf( char *buffer, const char *format, [ argument] … );
参数列表
buffer:
char型指针,指向将要写入的字符串的缓冲区。
format:格式化字符串。
[argument]..
.:可选参数,可以是任何类型的数据。
返回值
返回写入buffer 的字符数,出错则返回-1. 如果 buffer 或 format 是空指针,且不出错而继续,函数将返回-1,并且 errno 会被设置为 EINVAL。
原来sprintf的第一个参数一定是char型的指针啊
strchr:
char *strchr(const char* _Str,char _Val)
char *strchr(char* _Str,char _Ch)
头文件:#include <string.h>
功能:查找
字符串_Str中首次出现字符_Val的位置
返回值:成功则返回要查找字符第一次出现的位置,失败返回NULL