gpt4 book ai didi

c - c中的回文数检查

转载 作者:行者123 更新时间:2023-11-30 15:13:39 28 4
gpt4 key购买 nike

这是我的代码,我的代码中有很多需要改进的地方,但我现在关心的是阻止程序崩溃。提前致谢!

#include <stdio.h>

int IsPalindrome(int a);
int dec[20];
int a = 0;
int main()
{

printf("Please insert your number:\n");
scanf("%d", a);
IsPalindrome(a);
return 0;

}

int IsPalindrome(int a)
{
int temp = 0;
int count = 1;
int p = 1;
temp = a;
while(temp > 10)
{
dec[count] = temp % 10;
count = count+1;
temp = temp / 10;
printf("%d", count);
}
for(int i = 1; i < count; i++)
{
if (dec[i] != dec[count-i])
{
printf("Your number is not a Palindrome");
return 1;
}
}
}

附带问题:

  • 我如何支持大于 20 位的数字(或者 - 如何创建一个不提前指定其大小的数组,并且我仍然可以在其中设置值)。
  • 我的函数应该是 void 还是 int(或其他参数)?

最佳答案

  • int a = 0; scanf("%d", a);会导致crush,因为这意味着它应该将数据存储到无效的地方。
  • 使用字符串来支持大数。
  • 如果您不使用函数的返回值,请将函数的返回类型设置为 void。请注意,根据标准,main() 的返回类型应为 int

试试这个:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define BUFFER_SIZE 512

char* ReadNumber(void);
void IsPalindrome(const char* a);
int main(void)
{
char* a;
printf("Please insert your number:\n");
a = ReadNumber();
IsPalindrome(a);
free(a);
return 0;

}

char* ReadNumber(void) {
char* ret = malloc(BUFFER_SIZE);
size_t allocatedSize = BUFFER_SIZE;
size_t readLen = 0;
if (ret == NULL)
{
perror("malloc");
exit(1);
}
for (;;)
{
int c = getchar();
if (!isdigit(c))
{
if (c != EOF) ungetc(c, stdin);
break;
}
ret[readLen++] = c;
if (readLen >= allocatedSize)
{
ret = realloc(ret, allocatedSize += BUFFER_SIZE);
if (ret == NULL)
{
perror("realloc");
exit(1);
}
}
}
ret[readLen] = '\0';
return ret;
}

void IsPalindrome(const char* a)
{
size_t count = strlen(a);
/* can't write as i < count - i - 1 because size_t may be unsigned */
for(size_t i = 0; i + i + 1 < count; i++)
{
if (a[i] != a[count - i - 1])
{
printf("Your number is not a Palindrome");
return;
}
}
}

关于c - c中的回文数检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34472434/

28 4 0
文章推荐: javascript - 将平面数组解析为嵌套结构(树)
文章推荐: c# - 如何序列化 List 同时转义特殊字符?