hdu1753

/*
ID:billat11
LANG:C
TASK:namenum
*/
#include<iostream>
#include<cstdio>
#include<cstdarg>
#include<stdlib.h>
#include<cstring>
#include<cmath>
using namespace std;
const int Len=402;//int 6
int c[Len+1],d[Len+1];
int xiao[Len+1],cf=0;

void addz(int a[],int b[])
 {
    memset(c,0,sizeof(c));
    
     for(int i=0;i<Len;i++)//0 低位
     {
         c[i]=a[i]+b[i];
     }
     for(int i=0;i<Len;i++)
     {
         c[i+1]+=c[i]/10;
         c[i]=c[i]%10;
     }
     return ;
 }
 void add1(int a[],int num)
 {
     memset(d,0,sizeof(d));
     for(int i=0;i<=Len;i++)
         d[i]=a[i];
         d[0]=a[0]+num;
     for(int i=0;i<Len;i++)
     {
         d[i+1]+=d[i]/10;
         d[i]=d[i]%10;
     }
     return ;
 }
 void addx(int a[],int b[])
 {
     cf=0;
     memset(xiao,0,sizeof(xiao));
     for(int i=Len;i>=0;i--)
     {
         xiao[i]=a[i]+b[i];
     }
     for(int i=Len;i>0;i--)
     {
         xiao[i-1]+=xiao[i]/10;
         xiao[i]=xiao[i]%10;
     }
     cf=xiao[0]/10;
     xiao[0]=xiao[0]%10;
 }

int cmp(int a[],int b[])
{
    for(int i=0;i<=Len;i++)
    {
        if(a[i]!=b[i]) return (a[i]-b[i])/abs(a[i]-b[i]);
    }
    return 0;
}
void print(int a[])
{
    int j;
    for(j=Len;j>0&&!a[j];j--);
    printf("%d",a[j]);
    j--;
    for(;j>=0;j--)
        printf("%d",a[j]);
    //cout<<endl;
}
void printx(int a[])
{
    int j,i;
    for(j=Len;(j>=0)&&(a[j]==0);j--);
    for(i=0;i<=j;i++)
        printf("%d",a[i]);
}
int main()
{
    int n,k;
    char as[Len+1],bs[Len+1];
    int inta[Len+1],intb[Len+1];
    while(scanf("%s %s",as,bs)==2)
    {
       int i,j,id,jd;
       int lena=strlen(as);
       int lenb=strlen(bs);
       memset(inta,0,sizeof(inta));
       memset(intb,0,sizeof(intb));
       for(i=0;(i<lena)&&(as[i]!='.');i++);
       for(id=0;id<i;id++)
           inta[i-1-id]=as[id]-'0';
      for(j=0;(j<lenb)&&(bs[j]!='.');j++);
       for(jd=0;jd<j;jd++)
           intb[j-1-jd]=bs[jd]-'0';
       addz(inta,intb);
      // print(c);
       i++;
       memset(inta,0,sizeof(inta));
       memset(intb,0,sizeof(intb));
       for(id=0;(i<lena)&&(id<=lena-1-i);id++)
       {
           inta[id]=as[i+id]-'0';
       }
       j++;
        for(jd=0;(j<lenb)&&(jd<=lenb-1-j);jd++)
       {
           intb[jd]=bs[j+jd]-'0';
       }
       addx(inta,intb);
       add1(c,cf);
       print(d);
       memset(inta,0,sizeof(inta));
       if(cmp(xiao,inta)>0) 
       {
           printf(".");
           printx(xiao);
       }
       cout<<endl;
    }
  //system("pause");
  return 0;
}

  

转载于:https://www.cnblogs.com/wuzhibin/archive/2012/06/06/2538823.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值