hdu 1753 大明A+B (正小数相加)

来源:互联网 发布:apache ant 1.9.4安装 编辑:程序博客网 时间:2024/04/29 23:13

链接:hdu 1753

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

现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。

 

Input
本题目包含多组测试数据,请处理到文件结束。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
 

Output
请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
 

Sample Input
1.1 2.91.1111111111 2.34443233431 1.1
 

Sample Output
43.45554344542.1
 

模拟小数相加即可可将其分为小数部分和整数部分两部分相加。

#include<stdio.h>#include<string.h>char s[410],t[410];int xsd(char s[],int n) //找小数点{    int i;    for(i=0;i<n;i++)        if(s[i]=='.')            break;    return i;}void add(char s1[],char s2[],int a1,int a2)  //整数部分相加{    int i,j,k;    if(a1>a2)        k=a1-1;    else        k=a2-1;    if(t[0]>'9'){      //当小数第一位要进位,应向整数个位进位        t[0]-=10;        s[k]++;    }    for(i=a1-1,j=a2-1;i>=0||j>=0;i--,j--){        if(i>=0&&j>=0)            s[k]+=s1[i]+s2[j]-48;        else if(i>=0&&j<0)            s[k]+=s1[i];        else if(i<0&&j>=0)            s[k]+=s2[j];        if(s[k]>'9'&&k){            s[k]-=10;            s[k-1]++;        }        k--;    }}int main(){    int i,j,k,n,m,a1,a2;    char s1[410],s2[410];    while(scanf("%s%s",s1,s2)!=EOF){        m=strlen(s1);        n=strlen(s2);        a1=xsd(s1,m);     //确定小数位        a2=xsd(s2,n);        memset(s,0,sizeof(s));   //清零        memset(t,0,sizeof(t));        k=0;        for(i=a1+1,j=a2+1;i<m||j<n;i++,j++){       //小数部分相加            if(i<m&&j<n)                t[k]+=s1[i]+s2[j]-48;            else if(i>=m&&j<n)                t[k]+=s2[j];            else if(j>=n&&i<m)                t[k]+=s1[i];            k++;        }        for(i=k-1;i>=0;i--){       //小数部分进位处理            if(t[i]>'9'&&i){                t[i]-=10;                t[i-1]++;            }        }        add(s1,s2,a1,a2);            if(s[0]>'9'){            s[0]-=10;            printf("1");        }        printf("%s",s);        for(i=k-1;i>=0;i--)            if(t[i]!='0')                break;        if(i!=-1){            printf(".");            t[i+1]=0;            printf("%s",t);        }        printf("\n");    }    return 0;}



0 0
原创粉丝点击