题解 | #浮点数加法#

浮点数加法

https://www.nowcoder.com/practice/ddec753f446e4ba4944e35378ba635c8

  1. 将两个浮点数a b,分别分为整数和小数部分 分别存储在四个不同的数组中
  2. 将a b的 整数部分加和,存在数组SUM中(要保证每一位正确的对齐,需要逆序存储);将a b的 小数部分加和,存在数组sum中(这里注意小数的加和与整数部分不同,在位数不同的情况下,要保证每一位正确的对齐,需要正序存储)
  3. 先对小数部分处理进位,因为可能小数会向整数部分进位(若小数部分进位,则整数部分的个位+1)
  4. 分别输出整数部分和小数部分(记得加小数点)

#include <stdio.h>
#include <memory.h>
#define N 31
int A[N],B[N];	//存整数
int a[N],b[N];	//存小数
int SUM[N+1],sum[N+1];	//存和 
char c; 
int main(){
	memset(A, 0, sizeof(A));
    memset(B, 0, sizeof(B));
	memset(a, 0, sizeof(a));
    memset(b, 0, sizeof(b));
    memset(sum, 0, sizeof(sum));
    int Alen,Blen,alen,blen,SUMlen,sumlen;	//各数组长度 
	int i,j;
	//读入第一个数的整数 
	for (i = 0;;){
		A[i] = getchar();
		if (A[i] == '.')break;
		else i++;
	}
	Alen = i; 
	//读入第一个数的小数 
	for (i = 0;;){
		a[i] = getchar();
		if (a[i] =='\n') break;
		else i++;
	}
	alen = i;	
	//读入第二个数的整数 
	for (i = 0;;){
		B[i] = getchar();
		if (B[i] == '.')break;
		else i++;
	}
	Blen = i; 
	//读入第二个数的小数 
	for (i = 0;;){
		b[i] = getchar();
		if (b[i] =='\n') break;
		else i++;
	}
	blen = i;	
	
	SUMlen = Alen > Blen ? Alen : Blen;
	sumlen = alen > blen ? alen : blen;
	
	//小数加和 
	for (i = 0, j = 0; i < alen; i++, j++){
		sum[j] += a[i]-'0';	
	}
	for (i = 0, j = 0; i < blen; i++, j++){
		sum[j] += b[i]-'0';	
	}
	//小数进位
	for (i = sumlen-1; i > 0; i--){
	 	if(sum[i] > 9) sum[i-1] += sum[i]/10;
		sum[i] %= 10; 
	}
	if (sum[0] > 9){
		sum[0] %= 10; 
		SUM[0] += 1;
	}
	
	
	//整数加和 
	for (i = Alen-1, j = 0; i >= 0; i--, j++){
		SUM[j] += A[i]-'0';	
	}
	for (i = Blen-1, j = 0; i >= 0; i--, j++){
		SUM[j] += B[i]-'0';	
	}
	
	//整数进位
	for (i = 0; i < SUMlen; i++){
		if(SUM[i] > 9) SUM[i+1] += SUM[i]/10;
		SUM[i] %= 10; 
		if (SUM[SUMlen]) SUMlen++;
	}
	
	//输出
	for (i = SUMlen-1; i >= 0;i--){
		printf("%d",SUM[i]);
	}
	printf(".");
	for (i = 0; i < sumlen ;i++){
		printf("%d",sum[i]);
	}
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务