zoukankan      html  css  js  c++  java
  • PAT 1074 宇宙无敌加法器 (20 分)

    地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”。每个 PAT 星人都必须熟记各位数字的进制表,例如“……0527”就表示最低位是 7 进制数、第 2 位是 2 进制数、第 3 位是 5 进制数、第 4 位是 10 进制数,等等。每一位的进制 d 或者是 0(表示十进制)、或者是 [2,9] 区间内的整数。理论上这个进制表应该包含无穷多位数字,但从实际应用出发,PAT 星人通常只需要记住前 20 位就够用了,以后各位默认为 10 进制。

    在这样的数字系统中,即使是简单的加法运算也变得不简单。例如对应进制表“0527”,该如何计算“6203 + 415”呢?我们得首先计算最低位:3 + 5 = 8;因为最低位是 7 进制的,所以我们得到 1 和 1 个进位。第 2 位是:0 + 1 + 1(进位)= 2;因为此位是 2 进制的,所以我们得到 0 和 1 个进位。第 3 位是:2 + 4 + 1(进位)= 7;因为此位是 5 进制的,所以我们得到 2 和 1 个进位。第 4 位是:6 + 1(进位)= 7;因为此位是 10 进制的,所以我们就得到 7。最后我们得到:6203 + 415 = 7201。

    输入格式:

    输入首先在第一行给出一个 N 位的进制表(0 < N ≤ 20),以回车结束。 随后两行,每行给出一个不超过 N 位的非负的 PAT 数。

    输出格式:

    在一行中输出两个 PAT 数之和。

    输入样例:

    30527
    06203
    415
    

    输出样例:

    7201

    写的代码很乱,很不在状态,说说测试点吧。
    测试点3,4是数非常大的时候, 如果使用数字作为输入,这测试点3,4,过不了,所以只能使用字符串作为输入。
    测试点5是有进位的情况,最后一个测试点是输出为0的情况。
      1 import java.util.Arrays;
      2 import java.util.Scanner;
      3 
      4 public class Test {
      5     
      6     public static void main(String[] args) {
      7         Scanner sc = new Scanner(System.in);
      8         //将反转后的进制表存入数组a中。
      9         String temp = sc.next();
     10         StringBuilder temp1 = new StringBuilder(temp);
     11         temp1 = temp1.reverse();
     12         int[] a = new int[temp.length()];
     13         for(int i=0;i<temp1.length();i++) {
     14             a[i] = (temp1.charAt(i)-'0');
     15         }
     16         //将反转后的第一个数存入数组b中,注意去除多余的零
     17         String temp2 = sc.next();
     18         StringBuilder temp3 = new StringBuilder(temp2);
     19         int i1 = 0;
     20         for(i1=0;i1<temp2.length();i1++) {
     21             if(temp3.charAt(i1)!='0') 
     22                 break;
     23         }
     24         temp3.delete(0, i1);
     25         temp3 = temp3.reverse();
     26         int[] b = new int[temp3.length()];
     27         for(int i=0;i<temp3.length();i++) {
     28             b[i] = temp3.charAt(i)-'0';
     29         }
     30         //将反转后的第一个数存入数组c中,注意去除多余的零
     31         String temp4 = sc.next();
     32         StringBuilder temp5 = new StringBuilder(temp4);
     33         for(i1=0;i1<temp4.length();i1++) {
     34             if(temp5.charAt(i1)!='0') 
     35                 break;
     36         }
     37         temp5.delete(0, i1);
     38         temp5 = temp5.reverse();
     39         int[] c = new int[temp5.length()];
     40         for(int i=0;i<temp5.length();i++) {
     41             c[i] = temp5.charAt(i)-'0';
     42         }
     43         //如果输入两个数为零,输出0;
     44         if(temp5.length()==0&&temp3.length()==0) {
     45             System.out.println(0);
     46             System.exit(0);
     47         }
     48         StringBuilder sum = new StringBuilder();
     49         int i = 0;
     50         int flag = 0;//进制
     51         while(i<b.length&&i<c.length) {
     52             int k = 0;
     53             k = b[i]+c[i]+flag;
     54             int k1 = a[i];
     55             if(a[i]==0)
     56                 k1 = 10;
     57             if(k>=k1) {
     58                 k = k%k1;
     59                 flag = 1;
     60             }else {
     61                 flag = 0;
     62             }
     63             sum.append(k+"");
     64             i++;
     65         }
     66         while(i<b.length) {
     67             int k = 0;
     68             k = b[i]+flag;
     69             int k1 = a[i];
     70             if(a[i]==0)
     71                 k1 = 10;
     72             if(k==k1) {
     73                 flag = 1;
     74                 sum.append(0+"");
     75             }else {
     76                 flag = 0;
     77                 sum.append(k+"");
     78             }
     79             i++;
     80         }
     81         while(i<c.length) {
     82             int k = 0;
     83             k = c[i]+flag;
     84             int k1 = a[i];
     85             if(a[i]==0)
     86                 k1 = 10;
     87             if(k==k1) {
     88                 flag = 1;
     89                 sum.append(0+"");
     90             }else {
     91                 flag = 0;
     92                 sum.append(k+"");
     93             }
     94             i++;
     95         }
     96         if(flag==1) {
     97             System.out.print(1);
     98         }
     99         System.out.println(sum.reverse().toString());
    100         
    101         
    102         
    103         
    104     }
    105         
    106 
    107 }
     
  • 相关阅读:
    [转]解密回声消除技术之二(应用篇)
    [转]解密回声消除技术之一(理论篇)
    Linux命令练级初级
    [转]win7+ubuntu 13.04双系统安装方法
    c/c++常用代码--清空目录
    c++程序开发利器
    vc2005 编译ACE-6.2.0
    Facebook Login api
    IIS7.0 下使用Intelligencia.UrlRewriter时Session为空问题
    无后缀名伪静态路径在IIS7.0的网站提示 "404
  • 原文地址:https://www.cnblogs.com/lolybj/p/9664934.html
Copyright © 2011-2022 走看看