zoukankan      html  css  js  c++  java
  • HDUOJ-------1753大明A+B(大数之小数加法)

    大明A+B

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 7545    Accepted Submission(s): 2662


    Problem Description
    话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
    这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。

    现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
     
    Input
    本题目包含多组测试数据,请处理到文件结束。
    每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
     
    Output
    请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
     
    Sample Input
    1.1 2.9
    1.1111111111 2.3444323343
    1 1.1
     
    Sample Output
    4
    3.4555434454
    2.1
     
    Author
    linle
     
    Source
     
     
    代码:
     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 #define maxn 405
     5 char sa[maxn],sb[maxn];
     6 struct node
     7 {
     8   int NN[405],point[405];
     9   int pos,nlen;
    10   void init()
    11   {
    12     memset(NN,0,sizeof(NN));
    13     memset(point,0,sizeof(point));
    14   }
    15 };
    16 node aa,bb;
    17 void cal(char *str,node *p)   //将大小数分解
    18 {
    19     int i,k,j=0,temp;
    20       p->pos=strlen(str)-1;
    21   for(i=0;str[i]!='.'&&i<=p->pos;i++)
    22       p->NN[j++]=str[i]-'0';
    23   for(k=i-1,j=0;k>j;k--,j++){
    24       temp=p->NN[k];
    25       p->NN[k]=p->NN[j];
    26       p->NN[j]=temp;
    27   }
    28   if(i<=p->pos)   p->nlen=i++;     //NN长度点位置
    29    else  p->nlen=p->pos;
    30        p->pos-=p->nlen ;           //小数位数
    31     for(j=0;i<strlen(str);i++)
    32        p->point[j++]=str[i]-'0';   //不进行逆序
    33 }
    34 void work(node sa ,node sb){
    35   int i,j,cc,maxc,minc,p_len=0;
    36    if(sa.pos>sb.pos){
    37        minc=sb.pos;
    38        maxc=sa.pos;
    39    }
    40    else{
    41        minc=sa.pos;
    42        maxc=sb.pos;
    43    }
    44      cc=0;
    45      p_len=maxc-1;
    46       for(i=maxc-1;i>=0;i--){
    47        sa.point[i]+=sb.point[i]+cc;
    48        cc= sa.point[i]/10;
    49        sa.point[i]%=10;
    50       }
    51    if(sa.nlen>sb.nlen){
    52       maxc=sa.nlen;
    53       minc=sb.nlen;
    54     }
    55     else{
    56       maxc=sb.nlen;
    57       minc=sa.nlen;
    58     }
    59    //判断小数点是否进
    60    maxc++;
    61    for(i=0,j=0;j<=maxc;j++){
    62       sa.NN[j]+=sb.NN[i++]+cc ;
    63       cc=sa.NN[j]/10 ;
    64       sa.NN[j]%=10 ;
    65    }
    66    while(maxc>0&&sa.NN[maxc]==0) maxc--;
    67    while(maxc>=0)
    68      printf("%d",sa.NN[maxc--]);
    69      i=0;
    70      while(sa.point[p_len]==0) p_len--;
    71    if(i<=p_len) printf(".");
    72    for(j=i;j<=p_len;j++)
    73     printf("%d",sa.point[j]);
    74     printf("
    ");
    75 }
    76 int main()
    77 {
    78     while(scanf("%s%s",sa,sb)!=EOF)
    79     {
    80       aa.init();
    81       bb.init();
    82       cal(sa,&aa);
    83       cal(sb,&bb);
    84       work(aa,bb);
    85     }
    86   return 0;
    87 }
    View Code
     
  • 相关阅读:
    Kafka 高级API 实战
    CDH 5.16.1 离线安装 Spark 2.3
    CDH5.16.1 离线安装 Kafka
    CDH5.16.1新增节点
    mysql搭建主从结构
    Kerberos常见错误
    expect实现脚本的 自动交互
    寒假day27
    寒假day26
    寒假day25
  • 原文地址:https://www.cnblogs.com/gongxijun/p/3690743.html
Copyright © 2011-2022 走看看