刚写的 看看符合你要求不
#include <stdio.h>
#include <string.h>
typedef struct
{
int a[200];
int b[200];
}NUM;
void format_num(NUM *n, char *str)
{
char *p_dot = NULL;
char *p;
int i = 0;
memset(n, 0, sizeof(*n));
for(p = str; *p; p ++)
if(*p == '.') break;
if(*p)p_dot = p;
p --;
while(p >= str)
{
n->a[i++] = *p-- - '0';
}
p = p_dot;
if(p == NULL) return;
i = 0;
p++;
while(*p)
n->b[i++] = *p++ - '0';
}
void print_num(NUM *n)
{
int i, j;
for(i = sizeof(n->a)/sizeof(n->a[0]) - 1; i>=0; i --)
if(n->a[i]) break;
if(i >= 0)
for(;i>=0; i --)
printf("%d",n->a[i]);
else printf("0");
for(i = sizeof(n->b)/sizeof(n->b[0]) - 1; i>=0; i --)
if(n->b[i]) break;
if(i>=0)
{
printf(".");
for(j = 0; j <= i; j ++)
printf("%d", n->b[j]);
}
}
void add(NUM *a, NUM *b, NUM*c)
{
int t = 0;
int i;
for(i = sizeof(a->b)/sizeof(a->b[0]) - 1; i>=0; i --)
{
t += a->b[i] + b->b[i];
c->b[i] = t%10;
t /= 10;
}
for(i = 0; i < sizeof(a->a)/sizeof(a->a[0]); i ++)
{
t += a->a[i] + b->a[i];
c->a[i] = t%10;
t /= 10;
}
}
int main()
{
char sa[100], sb[100];
NUM a,b,c;
scanf("%s%s", sa,sb);
format_num(&a, sa);
format_num(&b,sb);
print_num(&a);
printf(" + ");
print_num(&b);
printf(" = ");
add(&a,&b,&c);
print_num(&c);
printf("\n");
return 0;
}