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