下面这段代码怎么写,要完整c程序
以Array实做长浮点数的运算。
将长浮点小数分成整数与小数两个部分储存于两个一维Array,计算并输出两数的相加、相减、相乘,输出的两个部分长度最大精确各为 60 位。
输入说明
输入2行,代表 2个浮点小数。
输出说明
1. 输出 3 行,分别为两数相加、相减、相乘结果。
Sample Input 1: 2个正数,相加乘为正、相减为负。
54375594968196412353419.7136567768967814548988
73287424855639561252347.4564956732129084076487
Sample Output:
127663019823835973605767.1701524501096898625475
-18911829887443148898927.7428388963161269527499
3985047330212387208846838718241110977261606713.61406369102666397315364414705498798400445156
Sample Input 2:
2 个负数,相加为负、相减为 0、相乘为正。
-9234507190321346790456789.1931587893642640223756
-9234507190321346790456789.1931587893642640223756
Sample Output:
-18469014380642693580913578.3863175787285280447512
0
85276123048096654594016550136815157974048477583569.58751391797434997190616787629405161746747536
Sample Input 3:
1 个正数与 1 个负数,相加减乘为负。
-26867969463606565474768123.5645144634542221
136452564856366342453.724563547586473564776
Sample Output:
-26867833011041709108425669.839950915867748535224
-26868105916171421841110577.289078011040695664776
-3666203345791645284973102086942259202952614005.2383003686028975820993973094750407496
Sample Input 4:
1 个正数与 1 个负数,相减为正、相加乘负
19342748593927235.4859695323773685960483721
-939329384736226582829496.04837462845050055
Sample Output:
-939329365393477988902260.5624050960731319539516279
939329404078975176756731.5343441608278691460483721
-18169212135841181949695789552712699214732.353525637433292855735431230415598257654655
参考这个:https://blog.csdn.net/qq_39117553/article/details/105786700
兄弟,我只写了个加法的,参考这个来吧
#include "stdio.h"
#include "string.h"
#define MAX_BIG_SIZE (60)
#define MAX(x, y) x > y ? x : y
typedef struct
{
char real_char_int[MAX_BIG_SIZE * 2 + 2];
char integer[MAX_BIG_SIZE];
int int_len;
char decimal[MAX_BIG_SIZE];
int dec_len;
} big_data;
void big_data_add(big_data a, big_data b, big_data *result)
{
char temp = 0;
int max = MAX(a.dec_len, b.dec_len);
for (int i = 0; i < max; i++)
{
if (a.decimal[i] + b.decimal[i] + temp >= 10)
{
result->decimal[i] = (a.decimal[i] + b.decimal[i] + temp) % 10;
temp = 1;
}
else
{
result->decimal[i] = a.decimal[i] + b.decimal[i] + temp;
temp = 0;
}
}
max = MAX(a.int_len, b.int_len);
for (int i = 0; i < max; i++)
{
if (a.integer[i] + b.integer[i] + temp >= 10)
{
result->integer[i] = (a.integer[i] + b.integer[i] + temp) % 10;
temp = 1;
}
else
{
result->integer[i] = a.integer[i] + b.integer[i] + temp;
temp = 0;
}
}
result->dec_len = MAX(a.dec_len, b.dec_len);
result->int_len = MAX(a.int_len, b.int_len);
if (temp == 1)
{
result->int_len++;
result->integer[result->int_len - 1] = 1;
}
}
void big_data_trans(big_data *data)
{
int total = 0;
char *p = NULL;
total = strlen(data->real_char_int);
p = strchr(data->real_char_int, '.');
*p = 0;
p++;
data->int_len = strlen(data->real_char_int);
data->dec_len = strlen(p);
int index = 0;
for (int i = data->int_len - 1; i >= 0; i--)
{
data->integer[i] = data->real_char_int[index++] - '0';
}
index = 0;
for (int i = data->dec_len - 1; i >= 0; i--)
{
data->decimal[i] = p[index++] - '0';
}
}
void print_big_data(big_data data)
{
int index = data.int_len - 1;
for (int i = 0; i < data.int_len; i++)
{
printf("%d", data.integer[index--]);
}
printf(".");
index = data.dec_len - 1;
for (int i = 0; i < data.dec_len; i++)
{
printf("%d", data.decimal[index--]);
}
printf("\n");
}
int main()
{
big_data a = {0};
big_data b = {0};
big_data result = {0};
scanf("%s", a.real_char_int);
big_data_trans(&a);
scanf("%s", b.real_char_int);
big_data_trans(&b);
big_data_add(a, b, &result);
print_big_data(result);
return 0;
}
easy