竖式问题,紫书3.2例题

strlen(s);
sprintf(buf,"%d",abc); strchr(s,buf(1));

返回字符串的已经定义过的部分的长度,不包括“”;

向字符串输入(在保证在字符串空间够的情况下,即字符个数加一);

判断字符串中是否含有某个字符,没有,返回NULL。

这道题难度不大,但是在题目中关于for循环到底是从“100 10”开始,是作者弄错了;还是从“111,11”开始,作者这样做有其他深意?这一点网上有争议。

我觉得是作者弄错了,以实验作为理由:

代码:

#include"iostream"
#include"cstring"
using namespace std;

int main()
{
    int count=0;
    char s[20],buf[99];
    scanf("%s",s);
    for(int abc=100;abc<=999;abc++)
    for(int de=10;de<=99;de++)
    {
        int x=abc*(de%10),y=abc*(de/10),z=abc*de;
        sprintf(buf,"%d%d%d%d%d",x,y,z,abc,de);
        int ok=1;
        for(int i=0;i<=strlen(buf);++i)
        if(strchr(s,buf[i])==NULL) ok=0;
        if(ok==1)
        {
            count++;
            printf("<%d>
",count);
            printf("%5d
*%4d
_____
%5d
%4d
_____
%5d

",abc,de,x,y,z);
        }
    }
    printf("%d",count);
 } 

输入 108,有34种结果

改为从“111 11”开始,输入108,只有四种结果,所以我认为是作者的失误

如果思路不对,恳请大家指教

柳暗花明又一村
原文地址:https://www.cnblogs.com/ucandoit/p/8319941.html