zoukankan      html  css  js  c++  java
  • hdu1230 火星A+B

    题目链接:

    http://acm.hdu.edu.cn/showproblem.php?pid=1230

    题目类型:

    模拟

    题意概括:

    第i位数的进制为第i个素数,求两个这样的数之和

    解题思路:

    根据给的范围,先将前29位素数打表出来,然后通过大数加法的方法即可

    题目:

    火星A+B

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 12890    Accepted Submission(s): 4423


    Problem Description
    读入两个不超过25位的火星正整数A和B,计算A+B。需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数。例如:地球上的10进制数2,在火星上记为“1,0”,因为火星个位数是2进制的;地球上的10进制数38,在火星上记为“1,1,1,0”,因为火星个位数是2进制的,十位数是3进制的,百位数是5进制的,千位数是7进制的……
     
    Input
    测试输入包含若干测试用例,每个测试用例占一行,包含两个火星正整数A和B,火星整数的相邻两位数用逗号分隔,A和B之间有一个空格间隔。当A或B为0时输入结束,相应的结果不要输出。
     
    Output
    对每个测试用例输出1行,即火星表示法的A+B的值。
     
    Sample Input
    1,0 2,1
    4,2,0 1,2,0
    1 10,6,4,2,1
    0 0
     
    Sample Output
    1,0,1
    1,1,1,0
    1,0,0,0,0,0
    # include <stdio.h>
    # include <string.h>
    int z[29]={1,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};
    int main ()
    {
        int t,k,i,j,m,n,o,a[500],b[500],c[500],d[500];
        char x[500],y[500];
        while(scanf("%s",x))
        {
            scanf("%s",y);
            if(x[0]=='0'&&y[0]=='0')
            return 0;
            memset(a,0,sizeof(a));
            memset(b,0,sizeof(b));
            memset(c,0,sizeof(c));
            memset(d,0,sizeof(d));
            m=strlen(x);
            j=0;
            for(i=0;i<m;i++)
            {
                if(x[i]!=',')
                {
                    a[j]*=10;a[j]+=x[i]-'0';
                }
                else
                j++;
            }
            for(i=0;i<=j;i++)
            {
                c[i]=a[j-i];
            }
            n=strlen(y);
            j=0;
            for(i=0;i<n;i++)
            {
                if(y[i]!=',')
                {
                    b[j]*=10;b[j]+=y[i]-'0';
                }
                else
                j++;
            }
            for(i=0;i<=j;i++)
            {
                d[i]=b[j-i];
            }
            for(i=0;i<27;i++)  
            {
                c[i]+=d[i];
                if(c[i]>=z[i+1])   
                {
                    c[i+1]++;
                    c[i]-=z[i+1];
                }
            }
            for(i=29;i>=0;i--)
            {
                if(c[i]!=0)
                {
                    o=i;break;
                }
            }
            for(i=o;i>0;i--)
            printf("%d,",c[i]);
            printf("%d
    ",c[0]);
        
        }
    }
  • 相关阅读:
    学习链接
    【转】C#学习路线WinForm学习路线
    WPF 等待动画控件
    wpf 设置窗体在屏幕的初始位置
    WPF 添加右键菜单 自定义透明控件
    记录自己的点滴
    Linux下的mysql默认大小写敏感
    springboot+mybatis遇到BUG:自动注入失败
    springboot在阿里CentOS 7后台永久运行
    阿里云CentOS7 64位安装jdk8和mysql5.6.43及远程连接mysql
  • 原文地址:https://www.cnblogs.com/love-sherry/p/6942398.html
Copyright © 2011-2022 走看看