计算两个数的回文数

Calculate the two palindrome of number

我有一个小项目,我必须编写一种算法来计算一个数的两个回文。 例如:如果输入为 367,则结果为 367763 和 763367。

我知道如何检查数字是否为回文。但是我必须创建两个回文,它有点不同,我找不到答案。

请在取消投票之前,我是编程中的菜鸟,想学习一些东西,我已经尝试解决问题并进行了很多搜索。

这是我检查数字是否为回文的代码:

    #include <stdio.h>
int main()
{
   int num, reverse_num=0, remainder,temp;
   printf("Enter an integer: ");
   scanf("%d", &num);
   temp=num;
   while(temp!=0)
   {
      remainder=temp%10;
      reverse_num=reverse_num*10+remainder;
      temp/=10;
   } 
   if(reverse_num==num) 
      printf("%d is a palindrome number",num);
   else
      printf("%d is not a palindrome number",num);
   return 0;
}

您的代码已包含 numreverse_num。您所要做的就是在 if else 语句中一个接一个地打印它们。那是 "instant gratification".

if(reverse_num==num) {
   printf("palindrome1 = palindrome2 = %d%d\n", num, num); 
}else{
   printf("palindrome1 = %d%d\n",num, reverse_num);
   printf("palindrome2 = %d%d\n",reverse_num, num);   
} 

如果您真的想将 回文 计算为实际 整数,则只需多几行代码。添加一个 计数器 用于在计算 reverse_num 时跟踪小数位...我们可以轻松 post 这里的代码,但它 很好 和学习 C 的简单练习,如果你自己做,你会得到更多。

当然,还有其他方法可以达到这个结果,正如其他答案和评论所建议的那样。此答案基于您输入的代码。

请注意,a*10^n 或更普遍的 … + 0*10^0 形式的数字可能会导致某些 "surprisingly looking" 回文 ,至少在OP中如何定义它们方面。

给你。

#include <stdio.h>

struct palindrome_pair
{ 
    unsigned long long int first;
    unsigned long long int second;
};

struct palindrome_pair build_palindrome( unsigned int x )
{
    const unsigned int Base = 10;
    struct palindrome_pair palindrome = { x, 1 };

    unsigned int y = 0;

    for ( unsigned int value = x; value != 0; value /= Base )
    {
        y = Base * y + value % Base;

        palindrome.first  *= Base;
        palindrome.second *= Base;
    }

    palindrome.first += y;
    palindrome.second = palindrome.second * y + x;

    return palindrome;
}

int main( void ) 
{
    unsigned int x = 367u;

    struct palindrome_pair palindrome = build_palindrome( x );

    printf( "%u:\t%llu\t%llu\n\n", x, palindrome.first, palindrome.second );

    const unsigned int N = 20;

    for ( unsigned int i = 0; i <= N; i++ )
    {
        palindrome = build_palindrome( i );

        printf( "%u:\t%llu\t%llu\n", i, palindrome.first, palindrome.second );
    }

    return 0;
}

程序输出为

367:    367763  763367

0:  0   0
1:  11  11
2:  22  22
3:  33  33
4:  44  44
5:  55  55
6:  66  66
7:  77  77
8:  88  88
9:  99  99
10: 1001    110
11: 1111    1111
12: 1221    2112
13: 1331    3113
14: 1441    4114
15: 1551    5115
16: 1661    6116
17: 1771    7117
18: 1881    8118
19: 1991    9119
20: 2002    220