加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

hdu 1753 大数相加(高精度)

发布时间:2021-01-16 16:19:13 所属栏目:大数据 来源:网络整理
导读:C -?大明A+B Time Limit:1000MS?????Memory Limit:32768KB?????64bit IO Format:%I64d %I64u Submit? Status Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。? 这时他已经不是那个只会做100以内加法的那个“

C -?大明A+B Time Limit:1000MS?????Memory Limit:32768KB?????64bit IO Format:%I64d & %I64u Submit? Status

Description

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

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

Input

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

Output

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

Sample Input

1.1 2.9
1.2222222222 2.3444323343
1 1.1

Sample Output

4
3.4555434454

2.1

思路:这个题我是将两个数的小数部分和整数部分分开相加然后在输出的,但是此题有几个需要注意地方: 1.小数点后多余的0不能输出,2.第一位小数的进位是要加在整数部分上的(这个比较容易被忽略) 我对小数进位的处理方法是:小数部分的第一位从数组的1开始存,然后进位存在下标为0的数组里,不管有没有进位直接将a[0]直接加到 整数部分的第一位这样比较方便处理 ac 代码: #include<stdio.h> #include<string.h> int a[510],b[510],c[510],d[510]; char s1[510],s2[510]; int main() { ? ?int ?i,j,n1,n2,t1,t2,num1,num2,k;? ? ? while(scanf("%s%s",s1,s2)!=EOF) ? ? ?{ ? ? ?t1=n1=strlen(s1); ? ? ? ? ? ? t2=n2=strlen(s2); ? ? ? ? memset(a,sizeof(a)); ? ? ? ? ? memset(b,sizeof(b)); ? ? ? ? ? memset(c,sizeof(c)); ? ? ? ? ? memset(d,sizeof(d)); ? ? ? ? ? ? ? for(i=0;i<n1;i++) ? ? ? ? ? ? ?{ ?if(s1[i]=='.') ? ? ? ? ? ? ? ? ?{ t1=i; ? ? ? ? ? ? ? ? ? break; } } k=0;? for(i=t1-1;i>=0;i--) ? a[k++]=s1[i]-'0'; for(i=0;i<n2;i++) {? ? ? if(s2[i]=='.') ? {t2=i; ? ? break; }? ?}? ?k=0; ?for(i=t2-1;i>=0;i--) ? b[k++]=s2[i]-'0'; ? k=1; ? if(t1+1<n1) ? ? ?for(i=t1+1;i<n1;i++) ? ? ? ?c[k++]=s1[i]-'0'; ? k=1; ? ?if(t2+1<n2) ? ? ? for(i=t2+1;i<n2;i++) ? ? ? d[k++]=s2[i]-'0'; ? ?num1=(n1-t1)>(n2-t2)?(n1-t1):(n2-t2); ? ?for(i=num1;i>=1;i--) ? ? { ?c[i]+=d[i]; ? ? ? if(c[i]>=10) ? ? ? ?{ ? c[i-1]++; ? ? ? ? ? ?c[i]-=10; } } a[0]+=c[0]; num2=(t1-1)>(t2-1)?(t1-1):(t2-1); for(i=0;i<=num2;i++) { ? a[i]+=b[i]; ? ?if(a[i]>=10) ? ?{ ?a[i+1]++; ? ? ?a[i]-=10; } } if(a[num2+1]>0) ? printf("%d",a[num2+1]); for(i=num2;i>=0;i--) ? printf("%d",a[i]); for(i=num1;i>=1;i--) { ?if(c[i]==0) ? ? continue; ? ?else ? ? break; } if(i==0); else { ? printf("."); ? ?for(j=1;j<=i;j++) ? ? ?printf("%d",c[j]); } printf("n"); ? ?? ? ? } ? ? return 0; }? hdu 1753

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读