zoukankan      html  css  js  c++  java
  • ZOJ 2529 A+B in Hogwarts 解题报告

              题目2529:A+B in Hogwarts

              链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1535

              题目描述:哈利波特去的魔法学院使用一种特殊进制法表示数字:第i位用第i个素数为进制(radix),例如“个位”的进制为第一个素数2,“十位”的进制为第二个素数3,“百位”的进制为第三个素数5,...依此类推。例如,十进制数2表示为10,十进制数6被表示为100。现在要求你为哈利波特写一个简单的计算器用于计算a+b的结果,每一行输入魔法学院的数字a和b,两个数字用空格分割,数字的每一位用逗号分割,要求计算出a+b的结果,并用魔法学院的表示法表示(注意,输入数字最多不超过25位)。

              示范输入:

              1,0 2,1
              4,2,0 1,2,0
              1 10,6,4,2,1

              示范输出:

              1,0,1
              1,1,1,0
              1,0,0,0,0,0

              该题目的难度不大,但对输入的解析和正确输出上有一定的技巧性,因此不能算特别简单的题。看到该题目的第一印象,我想把输入的数字a和b都转换为常规的int整数,然后再把a+b的结果转换为该特殊进制,但是这个转换过程会比常规的进制转换复杂一些,例如把1,0,0转换为10进制的过程是1*(2*3)+0*(2)+0=6;

              因此我们马上改变思路,采用类似大数算法的方法,即使用一个数组来表示数字,然后把每一位使用的进制存储到一个数组r中,即r中存储前25个素数。然后计算a+b的过程和大数加法完全一致,唯一不同的是,大数加法的每一位都使用10进制,而这里每一位使用的进制都不同。

              我们首先写出前25个素数,并存储到一个固定的数组中,我们可以用下面的代码来获取(请注意下面的代码完全是辅助性质,和最终题目的解并无关系):

    Code_求出前25个素数

              下面我们给出ZOJ 2529题目的完整代码:

    Code_ZOJ_2529_Solution

              最后值得一提的是,解析输入的代码:ParseInput方法,用于把形如"10,6,4,2,0"这样的字符串解释到一个int数组(dest)内,是dest数组成为{0,2,4,6,10,0,...}。

              用于把结果输入的方法,PrintResult,要注意当计算结果为0和1这样的比较特殊的情况,必须也应该能正确输出。这些比较临界的细节是尤其需要注意的地方。

  • 相关阅读:
    插入排序Java实现
    WMI控制IIS(2)
    WMI控制IIS
    C语言中用qsort()快速排序
    list_for_each引起的问题
    c++数组地址
    Valgrind 使用简单说明检查内存泄露
    firefox 在UBUNTU下编译
    内存泄漏检测umdh
    ubuntu GIT 安装与使用
  • 原文地址:https://www.cnblogs.com/hoodlum1980/p/1333979.html
Copyright © 2011-2022 走看看