题目描述
一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859。两小时后里程表上出现了一个新的对称数。问该车的速度是多少?新的对称数是多少?
输入格式
无
输出格式
无
样例输入
复制
无
样例输出
复制
95959
我最开始没有动态开辟内存,是这么写的,答案对是对的(可能编译器擦屁股了),但提交时运行错误.返回了设计指针、地址的局部变量,那我这不铁铁错的?
错误代码:
char* re_str(int x)
{
char str[1000000];
char *p = str;
int i;
for(i=0; x; i++)
{
str[i] = x%10 +'0';
x /= 10;
}
str[i] = '\0';
return p;
}
int main()
{
int i, j, k, flag = 0;
char *ret = NULL;
i = 95859;
for(i+=1; ;i++)
{
flag = 0;
ret = re_str(i);
for(j=0,k=strlen(ret)-1; j<strlen(ret)/2; j++,k--)
{
if(ret[j] != ret[k])
{
flag++;
break;
}
}
if(flag == 0)
{
printf("%d\n", i);
break;
}
}
return 0;
}
正确的代码,应是动态开辟,然后在主函数里把ret指向的内存给free掉,注意malloc的头文件
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
//#include <sys/malloc.h> xcode里这个头文件采用的了malloc
#include <mm_malloc.h> windows系统大概是这个
char* re_str(int x)
{
char *str = NULL;
str = (char*)malloc(10000000);
int i;
for(i=0; x; i++)
{
str[i] = x%10 +'0';
x /= 10;
}
str[i] = '\0';
return str;
}
int main()
{
int i, j, k, flag = 0;
char *ret = NULL;
i = 95859;
for(i+=1; ;i++)
{
flag = 0;
ret = re_str(i);
for(j=0,k=strlen(ret)-1; j<strlen(ret)/2; j++,k--)
{
if(ret[j] != ret[k])
{
flag++;
break;
}
}
if(flag == 0)
{
printf("%d\n", i);
break;
}
free(ret);
}
return 0;
}