【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】

竞赛决不是捷径,它只是另一种艰辛的生活方式。得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。我不会永远成功,正如我不会永远失败一样

  C++博客 :: 首页 :: 联系 ::  :: 管理
  6 Posts :: 239 Stories :: 25 Comments :: 0 Trackbacks

常用链接

留言簿(7)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 104853
  • 排名 - 233

最新评论

阅读排行榜

评论排行榜

如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”。例如,12321就是一个回文数,而77778就不是。当然,回文数的首和尾都应是非零的,因此0220就不是回文数。

事实上,有一些数(如21),在十进制时不是回文数,但在其它进制(如二进制时为10101)时就是回文数。

编一个程序,从文件读入两个十进制数N (1 <= N <= 15)S (0 < S < 10000)然后找出前N个满足大于S且在两种或两种以上进制(二进制至十进制)上是回文数的十进制数,输出到文件上。

本问题的解决方案不需要使用大于32位的整型变量。

INPUT FORMAT:

(file dualpal.in)

只有一行,用空格隔开的两个数N和S。

OUTPUT FORMAT:

(file dualpal.out)

N行, 每行一个满足上述要求的数,并按从小到大的顺序输出。


input:
3 25

output:
26
27
28

【参考程序】:
/*
ID: XIONGNA1
PROG: dualpal
LANG: C++
*/
#include<
iostream>
using
 namespace std;
int n,s;
bool tf(int k,int b)
{
    
int a[50],len=0;
    
while (k)
    {
        len
++;
        a[len]
=k%b;k=k/b;
    }
    
for (int i=1;i<=len/2;i++)
        
if (a[i]!=a[len-i+1]) return false;
    
return true;
}
int main()
{
    freopen(
"dualpal.in","r",stdin);
    freopen(
"dualpal.out","w",stdout);
    scanf(
"%d%d",&n,&s);
    
while (n)
    {
        s
++;int p=0;
        
for (int i=2;i<=10;i++)
            
if (tf(s,i))
            {
                p
++;
                
if (p==2break;
            }
        
if (p==2)
        {
            printf(
"%d\n",s);
            n
--;
        }
    }
    
return 0;
}

posted on 2009-07-14 17:19 开拓者 阅读(557) 评论(0)  编辑 收藏 引用 所属分类: USACO 题解

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理