• HDU1230 火星A+B【进制】


    问题链接HDU1230 火星A+B

    问题简述:参见上述链接。

    问题分析这是一个有关进制的问题,需要了解进制的原理,相关知识背景是必要的

    人们通常使用10进制,每一位都是逢10进1。另外一个重要的概念是位权的概念,即每一个位置不同的数字其权值不同。10进制中,个位的权是1,十位的权是10,百位的权是100,依此类推。10进制中,高1位(左边位)的权是低一位(右边位)的10倍。

    然而,这个问题的每一位的权是素数,这一点有所不同,没有任何问题,也是可以计算的。

    程序说明(略)。


    AC的C语言程序如下:

    /* HDU1230 火星A+B */
    
    #include <stdio.h>
    #include <memory.h>
    
    #define MAXN    30
    
    int primes[26]={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};
    int a[MAXN], b[MAXN], sum[MAXN], acount, bcount, count;
    char c;
    
    int main(void)
    {
        int i, j;
    
        while(1) {
            memset(a, 0, sizeof(a));
            memset(b, 0, sizeof(b));
            memset(sum, 0, sizeof(sum));
    
            i = 0;
            for(;;) {
                scanf("%d%c", &a[i], &c);
                if(c == ' ')
                    break;
                else
                    i++;
            }
            acount = i;
    
            i = 0;
            for(;;) {
                scanf("%d%c", &b[i], &c);
                if(c == '
    ')
                    break;
                else
                    i++;
            }
            bcount = i;
    
            if(acount == 0 && bcount == 0 && a[0] == 0 && b[0] == 0)
                break;
    
            count = (acount > bcount) ? acount : bcount;
    
            for(i=acount, j=0; i >= 0; i--, j++)
                sum[j] += a[i];
    
            for(i=bcount, j=0; i >= 0; i--, j++)
                sum[j] += b[i];
    
            for(i=0; i<=count; i++)
                if(sum[i] >= primes[i]) {
                    sum[i] -= primes[i];
                    sum[i+1]++;
                }
            if(sum[count+1])
                count++;
    
            for(i=count; i>0; i--)
                printf("%d,", sum[i]);
            printf("%d
    ", sum[0]);
        }
    
        return 0;
    }

    其中,数组a、b和sum分别用于存储数A、数B和A+B(和)。

    需要注意的是,读入的数据从左到右是从高位到低位。然而,进行计算时,需要从低位到高位进行计算,以便于有进位时进行进位计算。

  • 相关阅读:
    树的直径
    Codeforces 734E Anton and Tree(缩点+树的直径)
    Codeforces 948D Perfect Security(字典树)
    Codeforces 954D Fight Against Traffic(BFS 最短路)
    Codeforces 954C Matrix Walk (思维)
    Codeforces 950D A Leapfrog in the Array (思维)
    Codeforces 946D
    Invitation Cards POJ-1511 (spfa)
    spfa 单源最短路究极算法
    Currency Exchange POJ
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564820.html
Copyright © 2020-2023  润新知