蓝桥杯题库 回文数游戏

题目:输入一个正整数N,若是回文数则输出;反之则将它与自己的对称数相加,仍非回文数则继续上一步直至出现回文数。要求输出过程次数  以及具体过程情况。

样例输入:

349

样例输出:3

349--->1292--->4213--->7337

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 50

int hws(char *str)      //检验某一个数是不是回文数
{
    int flag=0;         //flag表示是否是回文数。1是。
    int i=0;
    int flag2=0;        //flag2表示暂时标志
    int len=strlen(str);
    while((flag2==0)&&(i<len/2))       
    {
        if(str[i]!=str[len-i-1])
            flag2=1;
        i++;
    }
    if(flag2==0)flag=1;
    return flag;
}

int main()
{
    char num[MAX];
    scanf("%s",num);

    char change[50];
    int lench=0;
    char nnum[50];
    int flag3=0;

    printf("%s",num);
    while((hws(num))!=1)
    {
        flag3=1;


        strcpy(change,num);                //本题证明对于字符串的复制不需要考虑是否覆盖的问题(自己会用‘\0’)
        lench=strlen(change);              //并且也不用对数组初始化
        char temp;
        int i=0;
        while(i<(lench/2))
        {
            temp=change[i];
            change[i]=change[lench-i-1];
            change[lench-i-1]=temp;
            i++;
        }
        int answer;
        answer=atoi(num)+atoi(change);          //使用了字符串操作函数
        itoa(answer,nnum,10);                   //新函数
        strcpy(num,nnum);
        printf("--->");
        printf("%s",num);

    }

    if(flag3==0)puts(num);
    
    return 0;
}

思路如注释所示。

过程反思:

利用好了标志变量!~(解决了很多问题)

对字符串函数的使用也很大帮助解决这道题!!!

对于复杂程序  将特殊模块分离出来形成函数  有助于简化整体流程和利于思路!!

还有在首次DEBUG的反思和总结!!!

(用很智能且多样性的手动断点法判断程序进行的异常     另外我出现了  一直等着光标闪但是运行不下去的情况(之前不知道是什么情况)现在知道了  大概率是卡在某个无限的循环了  可以确定哪个循环 然后找原因就行了 )

发布了10 篇原创文章 · 获赞 0 · 访问量 105

猜你喜欢

转载自blog.csdn.net/weixin_45076393/article/details/104543857
今日推荐