高精度-小数加法【模板】
题目链接:A+B Problem IV
计算400位以内的小数加法
模板:
#include
#include
#include
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;i9){pre1[i+1]+=pre1[i]/10;pre1[i]%=10;}}//输出preint 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]);//输出sufint 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;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
