• hdu 1230 火星A+B


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1230

    火星A+B

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


    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
     
    题目大意:这是我一次比赛,差这一题ak的,无奈,当时说了一句,我一个地球人,怎么知道火星a+b怎么算,比赛结束后,看了下这题是麻烦了些哈~~
    把字符转换一下,然后按照大数的思想做下去就ok了,不过我还是转换了好久,把数字一位一位的拿出来,在倒叙相加,最后在倒着输出来!!
     
    详见代码。
     
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 int hash[9999],sum[110];
     7 char ch1[110],ch2[110];
     8 int num1[110],num2[110];
     9 int n1[110],n2[110],k1,k2;
    10 
    11 void sushu()
    12 {
    13     int n,i,k=1;hash[0]=2;
    14     for (n=3; n<=9999; n++)
    15     {
    16 
    17         for (i=2; i*i<=n; i++)
    18         {
    19             if (n%i==0)
    20                 break;
    21                 else
    22                 hash[k++]=n;
    23         }
    24         if (i*i>n)
    25         hash[k++]=n;
    26     }
    27 }
    28 
    29 int main ()
    30 {
    31     sushu();
    32     while (cin>>ch1>>ch2)
    33     {
    34         if (strcmp(ch1,"0")==0&&strcmp(ch2,"0")==0)
    35             break;
    36         memset(n1,0,sizeof(n1));
    37         memset(n2,0,sizeof(n2));
    38         memset(num1,0,sizeof(num1));
    39         memset(num2,0,sizeof(num2));
    40         int len1=strlen(ch1);
    41         int len2=strlen(ch2);
    42         k1=0;
    43         for (int i=0; i<len1; i++)
    44         {
    45             if (ch1[i]==',')
    46             {
    47                 k1++;
    48                 continue;
    49             }
    50             num1[k1]=num1[k1]*10+ch1[i]-'0';
    51         }
    52         k2=0;
    53         for (int i=0; i<len2; i++)
    54         {
    55             if (ch2[i]==',')
    56             {
    57                 k2++;
    58                 continue;
    59             }
    60             num2[k2]=num2[k2]*10+ch2[i]-'0';
    61         }
    62         for (int i=k1; i>=0; i--)
    63             n1[k1-i]=num1[i];
    64         for (int i=k2; i>=0; i--)
    65             n2[k2-i]=num2[i];
    66 
    67         int K=k1>k2?k1:k2;
    68         for (int i=0; i<=K; i++)
    69         {
    70             if (i==0)
    71                 sum[i]=n1[i]+n2[i];
    72             else
    73             {
    74                 if (sum[i-1]>=hash[i-1])
    75                     sum[i]=n1[i]+n2[i]+1;
    76                 else
    77                     sum[i]=n1[i]+n2[i];
    78             }
    79         }
    80         if (sum[K]>=hash[K])
    81             sum[++K]=1;
    82 
    83         for (int i=K; i>=0; i--)
    84         {
    85             if (i==K)
    86                 printf ("%d",sum[i]%hash[i]);
    87             else
    88                 printf (",%d",sum[i]%hash[i]);
    89         }
    90         printf ("
    ");
    91     }
    92     return 0;
    93 }
  • 相关阅读:
    Bootstrap 实战之响应式个人博客 (一)
    观察者(发布——订阅)模式
    迭代器模式
    代理模式
    策略模式
    单例模式
    CSS3 媒体记
    CSS3 动画记
    css3 过渡记
    CSS3 变形记
  • 原文地址:https://www.cnblogs.com/qq-star/p/3935682.html
Copyright © 2020-2023  润新知