题目:输入一个正整数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的反思和总结!!!
(用很智能且多样性的手动断点法判断程序进行的异常 另外我出现了 一直等着光标闪但是运行不下去的情况(之前不知道是什么情况)现在知道了 大概率是卡在某个无限的循环了 可以确定哪个循环 然后找原因就行了 )