计算两个回文数

时间:2016-07-15 11:12:06

标签: c algorithm palindrome

我有一个小项目,我必须编写一个计算一个数字的两个回文的算法。 例如:如果输入为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;
}

2 个答案:

答案 0 :(得分:1)

您的代码已同时包含numreverse_num。您所要做的就是在if else语句中依次打印它们。这就是&#34;即时满足&#34;。

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时添加一个计数器来跟踪小数位...我们可以在这里轻松发布代码,但它且简单练习 C ,如果你自己动手,你会得到更多。

当然,还有其他方法可以实现结果,正如其他答案和评论所暗示的那样。这个答案基于您的代码输入。

另请注意,表单a*10^n或更一般… + 0*10^0的数量可能会导致一些&#34;令人惊讶地看到&#34; palindromes ,至少在OP中定义它们的方式。

答案 1 :(得分:1)

你在这里。

#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