题解 | #浮点数加法# 简单,轻松搞定
浮点数加法
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;
}
查看28道真题和解析