高精度-小数加法【模板】
2017-08-12 17:32
435 查看
题目链接:A+B Problem IV
计算400位以内的小数加法
模板:
计算400位以内的小数加法
模板:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; char str1[405],str2[405]; int pre1[405],pre2[405],suf1[405],suf2[405],point1,point2; int main() { while(~scanf("%s%s",str1,str2)) { memset(pre1,0,sizeof pre1); memset(pre2,0,sizeof pre2); memset(suf1,0,sizeof suf1); memset(suf2,0,sizeof suf2); point1=strlen(str1); point2=strlen(str2); for(int i=0;str1[i];i++) { if(str1[i]=='.') { point1=i; break; } pre1[i]=str1[i]-48; } if(point1!=strlen(str1)) { for(int i=point1+1;str1[i];i++) suf1[i-point1-1]=str1[i]-48; } //----------------------- for(int i=0;str2[i];i++) { if(str2[i]=='.') { point2=i; break; } pre2[i]=str2[i]-48; } if(point2!=strlen(str2)) { for(int i=point2+1;str2[i];i++) suf2[i-point2-1]=str2[i]-48; } //suf相加 int up_to_pre=0; for(int i=400;i>=0;i--) { suf1[i]+=suf2[i]; if(i==0) { up_to_pre=suf1[0]/10; suf1[0]%=10; } else if(suf1[i]>9) { suf1[i-1]+=suf1[i]/10; suf1[i]%=10; } } //pre反转 for(int i=0;i<point1/2;i++) swap(pre1[i],pre1[point1-i-1]); for(int i=0;i<point2/2;i++) swap(pre2[i],pre2[point2-i-1]); //pre相加 pre1[0]+=up_to_pre; for(int i=0;i<point1 || i<point2;i++) { pre1[i]+=pre2[i]; if(pre1[i]>9) { pre1[i+1]+=pre1[i]/10; pre1[i]%=10; } } //输出pre int top=0; for(int i=400;i>=0;i--) { if(pre1[i]) { top=i; break; } } for(int i=top;i>=0;i--) printf("%d",pre1[i]); //输出suf int tail=-1; for(int i=400;i>=0;i--) { if(suf1[i]) { tail=i; break; } } if(tail!=-1) { printf("."); for(int i=0;i<=tail;i++) printf("%d",suf1[i]); } printf("\n"); } return 0; }
相关文章推荐
- HDOJ 1753 大明A+B (高精度的小数加法 java )
- 小数高精度加法
- 高精度加法模板
- A+B problem (压8位高精度加法模板)
- uva 424 Integer Inquiry(高精度加法模板) uva 10106 Product(高精度乘法模板)
- hdu 1753 大明A+B(高精度小数加法)
- hdu 1753 大明A+B(高精度小数加法)
- 模板总结——高精度加法
- 高精度加法模板
- 题目1137:浮点数加法(高精度小数加法)
- 高精度小数加法
- 高精度加法模板
- HDU-高精度小数加法-最大400位
- FZU 2032 高精度小数加法
- 高精度加法模板
- 高精度加法模板
- 高精度 大数加法 乘法 除法 幂 模板
- 高精度之加法模板
- 我的高精度加法模板
- 高精度加法模板