• 九度oj 题目1016:火星A+B


    题目描述:
        读入两个不超过25位的火星正整数A和B,计算A+B。需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数。例如:地球上的10进制数2,在火星上记为“1,0”,因为火星个位数是2进制的;地球上的10进制数38,在火星上记为“1,1,1,0”,因为火星个位数是2进制的,十位数是3进制的,百位数是5进制的,千位数是7进制的……
    输入:
        测试输入包含若干测试用例,每个测试用例占一行,包含两个火星正整数A和B,火星整数的相邻两位数用逗号分隔,A和B之间有一个空格间隔。当A或B为0时输入结束,相应的结果不要输出。
    输出:
        对每个测试用例输出1行,即火星表示法的A+B的值。
    样例输入:
    1,0 2,1
    4,2,0 1,2,0
    1 10,6,4,2,1
    0 0
    样例输出:
    1,0,1
    1,1,1,0
    1,0,0,0,0,0
    这道题比较诡异,题目中说两个不超过25位的A,B是指int数组不超过25位,而转化为char后就不止25位了,因为这个原因run time error了两次,代码如下
     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cstring>
     4 #include <string>
     5 #define MAX 300
     6 int prom[MAX] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107};
     7 char A[MAX];
     8 char B[MAX];
     9 int ans[MAX];
    10 
    11 int isNEnd() {
    12     if(strcmp(A,"0") == 0 && strcmp(B,"0") == 0) {
    13         return 0;
    14     }
    15     else {
    16         return 1;
    17     }
    18 }
    19 
    20 int main(int argc, char const *argv[])
    21 {
    22     memset(A,-1,sizeof(A));
    23     memset(B,-1,sizeof(B));
    24 
    25     scanf("%s %s",A,B);
    26     while(isNEnd()) {
    27         int lenA = strlen(A);
    28         int lenB = strlen(B);
    29         int i = lenA - 1, j = lenB - 1;
    30         int wtemp = 0;
    31         int bitb = 0;
    32         int bitc = 0;
    33         while(i >= 0 || j >= 0) {
    34             int i0 = i;
    35             int j0 = j;
    36             int numa = 0, numb = 0;
    37             while(i >= 0 && A[i] != ',') {
    38                 //printf("%d
    ",A[i]);
    39                 i--;
    40             }
    41             if(i0 >= 0) {
    42                 for(int k = i + 1; k <= i0; k++) {
    43                     numa = numa * 10 + A[k] - '0';
    44                 }
    45             }
    46             
    47 
    48             while(j >= 0 && B[j] != ',') {
    49                 //printf("%d
    ",B[j]);
    50                 j--;
    51             }
    52             if(j0 >= 0) {
    53                 for(int k = j + 1; k <= j0; k++) {
    54                 numb = numb * 10 + B[k] - '0';
    55                 }
    56             }
    57             
    58 
    59             int bit = numa + numb + bitc;
    60             bitb = bit % prom[wtemp];
    61             bitc = bit / prom[wtemp];
    62             ans[wtemp] = bitb;
    63             i--;
    64             j--;
    65             wtemp++;
    66         }
    67         if(bitc != 0) {
    68             ans[wtemp] = bitc;
    69             wtemp++;
    70         }
    71         for(int i = wtemp -1; i >= 1; i--) {
    72             printf("%d,",ans[i]);
    73         }
    74         printf("%d
    ",ans[0]);
    75         scanf("%s %s",A,B);
    76     }
    77  
    78     return 0;
    79 }
  • 相关阅读:
    vbs小脚本01将文件内txt转录到excel
    MybatisPlus乐观锁Version
    PHP使用pdfparser实现对PDF转换成本文
    php获取图片的主要颜色值RGB
    nginx http跳转到https
    java 获取中文第一个拼音方法
    mysql like查询时区分字母大小写
    mysql 查询用逗号隔开字符串的关键字
    Fiddler 手机抓包
    携程爬虫
  • 原文地址:https://www.cnblogs.com/jasonJie/p/5678404.html
Copyright © 2020-2023  润新知