将 0110 打印为回文
Printing 0110 as palindrome
#include <stdio.h>
int main()
{
int n, reverse = 0, temp;
printf("Enter a number to check if it is a palindrome or not\n");
scanf("%d",&n);
temp = n;
while( temp != 0 )
{
reverse = reverse * 10;
reverse = reverse + temp%10;
temp = temp/10;
}
if ( n == reverse )
printf("%d is a palindrome number.\n", n);
else
printf("%d is not a palindrome number.\n", n);
return 0;
}
上面的代码将检查一个数字是否是回文或 not.It 工作 fine.If 你输入 151 它会说它是一个回文 number.However 如果你输入 0110 它会打印不palindrome.Although 我知道 0110 实际上是 110,但我的教授说要怎么做才能将 011 和 001100 之类的数字打印为 palindrome.What 有什么想法吗?
我建议你读一个字符串,然后检查是否是回文。
这是您的代码:
#include <stdio.h>
#include <string.h>
int main()
{
char buffer[64];
printf("Enter a number to check if it is a palindrome or not\n");
scanf("%63s",buffer);
size_t dim = strlen(buffer);
for (size_t i = 0; i < (dim / 2); i++) {
if (buffer[i] != buffer[dim - i - 1]) {
printf("%s is not a palindrome number.\n", buffer);
return 0;
}
}
printf("%s is a palindrome number.\n", buffer);
return 0;
}
尝试使用 Int 数组来实现这一点,而不是将输入保存在一个整型变量中。
当你在你的int n中保存整数时,前缀0被忽略了。但是如果你使用整数数组来存储其中的每个字符,然后处理数组以检查回文那么期望的结果将是正确的。
在这里查看 C 中的数组:https://www.tutorialspoint.com/cprogramming/c_arrays.htm
您可以使用字符串(字符数组)存储输入。我已经更新了您的代码以使用相同的代码 -
#include <stdio.h>
#include <stdlib.h>
int get_len (char *inp) {
int curr_len = 0;
for (curr_len=0; inp[curr_len] != '[=10=]'; curr_len++);
return curr_len-1;
}
int main()
{
int palindrome = 1;
char *inp = (char *) malloc (100*sizeof(char *));
printf("Enter a number to check if it is a palindrome or not\n");
scanf("%s",inp);
int len = get_len (inp);
int i;
for (i=0; i < len/2; i++)
{
if (inp[i] != inp[len-i]) {
palindrome = 0;
break;
}
}
if ( palindrome )
printf("%s is a palindrome number.\n", inp);
else
printf("%s is not a palindrome number.\n", inp);
return 0;
}
#include <stdio.h>
int main()
{
int n, reverse = 0, temp;
printf("Enter a number to check if it is a palindrome or not\n");
scanf("%d",&n);
temp = n;
while( temp != 0 )
{
reverse = reverse * 10;
reverse = reverse + temp%10;
temp = temp/10;
}
if ( n == reverse )
printf("%d is a palindrome number.\n", n);
else
printf("%d is not a palindrome number.\n", n);
return 0;
}
上面的代码将检查一个数字是否是回文或 not.It 工作 fine.If 你输入 151 它会说它是一个回文 number.However 如果你输入 0110 它会打印不palindrome.Although 我知道 0110 实际上是 110,但我的教授说要怎么做才能将 011 和 001100 之类的数字打印为 palindrome.What 有什么想法吗?
我建议你读一个字符串,然后检查是否是回文。 这是您的代码:
#include <stdio.h>
#include <string.h>
int main()
{
char buffer[64];
printf("Enter a number to check if it is a palindrome or not\n");
scanf("%63s",buffer);
size_t dim = strlen(buffer);
for (size_t i = 0; i < (dim / 2); i++) {
if (buffer[i] != buffer[dim - i - 1]) {
printf("%s is not a palindrome number.\n", buffer);
return 0;
}
}
printf("%s is a palindrome number.\n", buffer);
return 0;
}
尝试使用 Int 数组来实现这一点,而不是将输入保存在一个整型变量中。
当你在你的int n中保存整数时,前缀0被忽略了。但是如果你使用整数数组来存储其中的每个字符,然后处理数组以检查回文那么期望的结果将是正确的。
在这里查看 C 中的数组:https://www.tutorialspoint.com/cprogramming/c_arrays.htm
您可以使用字符串(字符数组)存储输入。我已经更新了您的代码以使用相同的代码 -
#include <stdio.h>
#include <stdlib.h>
int get_len (char *inp) {
int curr_len = 0;
for (curr_len=0; inp[curr_len] != '[=10=]'; curr_len++);
return curr_len-1;
}
int main()
{
int palindrome = 1;
char *inp = (char *) malloc (100*sizeof(char *));
printf("Enter a number to check if it is a palindrome or not\n");
scanf("%s",inp);
int len = get_len (inp);
int i;
for (i=0; i < len/2; i++)
{
if (inp[i] != inp[len-i]) {
palindrome = 0;
break;
}
}
if ( palindrome )
printf("%s is a palindrome number.\n", inp);
else
printf("%s is not a palindrome number.\n", inp);
return 0;
}