zoukankan      html  css  js  c++  java
  • 【USACO 1.2.5】双重回文数

    【题目描述】

    如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”。例如,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行, 每行一个满足上述要求的数,并按从小到大的顺序输出.

    【分析】

    这道题教会了我写函数模板的重要性......

     1 #include <cstdlib>
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cmath>
     5 #include <cstring>
     6 const int maxl=100000;
     7 using namespace std;
     8 int shu_1[maxl],shu_2[maxl];
     9 int temp[maxl];
    10 //进制转换 
    11 void change(int *shu,int num,int system);
    12 bool check(int *shu);//检查是否是回文数 
    13 int main()
    14 {
    15     int n,i,s,cnt=0;
    16     
    17     //文件操作
    18     freopen("dualpal.in","r",stdin);
    19     freopen("dualpal.out","w",stdout);
    20     scanf("%d%d",&n,&s);
    21     
    22     for (i=s+1;;i++)
    23     {
    24         if (cnt==n) break;
    25         int lj=0;
    26         for (int j=2;j<=10;j++)
    27         {
    28             change(shu_1,i,j);
    29             if (check(shu_1)) lj++;
    30         }
    31         if (lj>=2) {printf("%d
    ",i);cnt++;}
    32     } 
    33     return 0;
    34 }
    35 //把一个num转换成system进制的数 
    36 void change(int *shu,int num,int system)
    37 {
    38      int point=0;
    39      memset(shu,0,sizeof(shu));
    40      memset(temp,0,sizeof(temp));
    41      point++;
    42      //进制转换 
    43      while (num!=0)
    44      {
    45            int t;
    46            t=num%system;
    47            num=num/system;
    48            temp[point++]=t;
    49      }
    50      point--;
    51      for (int i=point;i>=1;i--) shu[point-i+1]=temp[i];
    52      shu[0]=point;//长度 
    53      return;
    54 }
    55 bool check(int *shu)
    56 {
    57      int point=shu[0],i;
    58      for (i=1;i<=(point/2)+1;i++)
    59      if (shu[i]!=shu[point-i+1]) return 0;
    60      return 1;
    61 }
  • 相关阅读:
    6. 复习complex类的实现过程
    英文文献写作注意事项
    5. 操作符重载与临时对象
    4. 参数传递与返回值
    3. 构造函数
    JSON之Asp.net MVC C#对象转JSON,DataTable转JSON,List<T>转JSON,JSON转List<T>,JSON转C#对象
    JSON.NET 使用技巧
    异常处理 Exception
    HTTP报文
    HttpWebRequest类
  • 原文地址:https://www.cnblogs.com/hoskey/p/3778649.html
Copyright © 2011-2022 走看看