题解 | #浮点数加法#
浮点数加法
https://www.nowcoder.com/practice/ddec753f446e4ba4944e35378ba635c8
#include <stdio.h> #include<string.h> int main() { char a[10007],b[10007],sum[100007]={'\0'}; int i=0,j=0; int ia,ib; int la,lb; int flag=0; int is=0; scanf("%s\n%s",a,b); la=strlen(a); lb=strlen(b); for(i=0;a[i]!='.';i++); for(j=0;b[j]!='.';j++); if((la-i)>(lb-j)){ for(int k=0;k<la-i-lb+j;k++){ b[lb+k]='0'; } lb+=la-i-lb+j; } else if((la-i)<(lb-j)){ for(int k=0;k<lb-j-la+i;k++){ a[la+k]='0'; } la+=lb-j-la+i; } //补齐结束 for(ia=la,ib=lb;ia>i&&ib>j;ia--,ib--){ int s; s=(a[ia]-'0'+b[ib]-'0'+flag); if(s>9) { flag=1; sum[is]=(s-10)+'0'; } else { flag=0; sum[is]=s+'0'; } is++; } sum[is]='.'; is++; for(ia=i-1,ib=j-1;ia>=0&&ib>=0;ia--,ib--){ int s; s=(a[ia]-'0'+b[ib]-'0'+flag); if(s>9) { flag=1; sum[is]=(s-10)+'0'; } else { flag=0; sum[is]=s+'0'; } is++; } while(ia>=0){ int s; s=(a[ia]-'0'+flag); if(s>9) { flag=1; sum[is]=(s-10)+'0'; } else { flag=0; sum[is]=s+'0'; } is++; ia--; } while(ib>=0){ int s; s=(b[ib]-'0'+flag); if(s>9) { flag=1; sum[is]=(s-10)+'0'; } else { flag=0; sum[is]=s+'0'; } is++; ib--; } for(int m=is-1;m>0;m--){ printf("%c",sum[m]); } printf("\n"); }