题解 | #浮点数加法# 简单,轻松搞定
浮点数加法
https://www.nowcoder.com/practice/ddec753f446e4ba4944e35378ba635c8
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define N 1000 int main() { char a[N]={'\0'},b[N]={'\0'}; char x[N]={'\0'},y[N]={'\0'}; scanf("%[^.].%s",a,b); while(getchar()!='\n'); scanf("%[^.].%s",x,y); // printf("%s.%s\n%s.%s\n",a,b,x,y); int numa[N]; int numb[N];//浮点 int i,j; for(i=0;i<N;i++){ numa[i]=-1; numb[i]=-1; } int lenb=strlen(b);int leny=strlen(y); int lena=strlen(a);int lenx=strlen(x); for(i=0;i<lenb || i<leny;i++){ if(i<lenb&&i<leny){ numb[i]=b[i]-'0'+y[i]-'0'; } else if(i<lenb&&i>=leny){ numb[i]=b[i]-'0'; } else{ numb[i]=y[i]-'0'; } } int len=lenb>leny?lenb:leny; int flag=0; for(i=len-1;i>0;i--){ while(numb[i]>9){ numb[i]-=10; numb[i-1]++; } } while(numb[0]>=10){ numb[0]-=10; flag++; } i=lena-1;j=lenx-1; int k=N-1; while(i>=0 || j>=0){ if(i>=0&&j>=0){ numa[k]=a[i]+x[j]-'0'-'0'; } else if(i<0 && j>=0){ numa[k]=x[j]-'0'; } else{ numa[k]=a[i]-'0'; } k--;i--;j--; } k=N-1; numa[k]+=flag; //printf(" FLAG=%d ",flag); while(numa[k]!=-1){ while(numa[k]>9){ numa[k]-=10; if(numa[k-1]==-1){ numa[k-1]=0; } numa[k-1]++; } k--; } for(i=0;i<N;i++){//输出num数组 if(numa[i]!=-1){ printf("%d",numa[i]); } } printf("."); for(i=0;i<N;i++){ if(numb[i]!=-1){ printf("%d",numb[i]); } }// // for(i=0;numb[i]!=-1;i++){ // b[i]=numb[i]+'0'; // } // b[i]='\0'; // // for(i=N-1;numa[i]!=-1;i--){ // a[N-i-1]=numa[i]+'0'; // } // if(numa[N-1]==0){ // a[0]='0'; // i=1; // } // a[i]='\0'; // printf("%s.%s",a,b); return 0; }