在C语言中,字符串实际上就是字符数组----你可以像处理普通数组一样处理字符串,只需要注意输入输出和字符串函数的使用。
exa3-3 竖式问题
找出所有形如abc*de(3位数×2位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式,所有竖式前应该有编号,以后应有一个空行。
最后输出解的总数。
1 #include<stdio.h>
2 #include<string.h>
3 int main()
4 {
5 int i,ok,abc,de, x,y,z, count=0;
6 char s[20], buf[99];
7 scanf("%s",s);
8 for(abc=111;abc<=999;abc++)
9 {
10 for(de=11;de<=99;de++)
11 {
12 x=abc*(de%10);
13 y=abc*(de/10);
14 z=abc*de;
15 sprintf(buf,"%d%d%d%d%d",abc,de,x,y,z);
16 ok=1;
17 for(i=0;i<strlen(buf);i++) if(strchr(s,buf[i])==NULL) ok=0;
18 if(ok)
19 {
20 printf("<%d>\n",++count);
21 printf("%5d\n*%4d\n-----\n%5d\n%4d\n-----\n%d\n\n",abc,de,x,y,z);
22 }
23
24
25 }
26
27 }
28 printf("The number of solutions=%d\n",count);
29 return 0;
30 }
样例输入:2357
样例输出:
<1>
775
* 33
-----
2325
2325
-----
25575
The number of solutions=1
备注:
1.sprintf输出到字符串,fprintf输出到文件,printf输出到屏幕。
多数情况下屏幕总是可以输出的,文件也一般可以随便写(除非磁盘满或者文件损坏),但字符串就不一定了。必须保证写入的字符串有足够的空间:字符个数+1。
2.char *strchr(const char *s, int c)用来查找参数s字符串中第一次出现参数c的地址并返回。
3.strlen(s) 的作用是获取字符串s的实际长度。如果开了一个字符数组a[20], 里面存放了''1234",那么实际长度是4+1 最后是一个'\0'结束标记。 之后15个字符是不确定的。
4.由于字符串本质是数组,所以也不是“一等公民”,只能用strcpy(a,b), strcmp(a,b), strcat(a,b) 来执行“赋值”,“比较”和“连接”操作。
5.用编译选项-Wall 编译程序时会给出很多(但不是所有)警告信息,以帮助查错。(书上写的,没感觉出来有什么用)