下面的代码是我自己想出来的,可能有点麻烦
# include <stdio.h>
# include <string.h>
# define MAX 5005
int num1[MAX];
int num2[MAX];
int sum[MAX];
int main(void)
{
char ch1[MAX];
char ch2[MAX];
int i, j;
while (scanf("%s %s", ch1, ch2) != EOF)
{
memset(num1, 0, sizeof(num1));
memset(num2, 0, sizeof(num2));
memset(sum, 0, sizeof(sum));
int len1 = strlen(ch1);
int len2 = strlen(ch2);
int flag1 = 0;
int flag2 = 0;
for (i = 0; i < len1; i ++)
{
if (ch1[i] == '.')
{
flag1 = len1 - 1 - i;//记录num1的小数点位置
}
}
for (i = 0; i < len2; i ++)
{
if (ch2[i] == '.')
{
flag2 = len2 - 1 - i;//记录num2的小数点位置
}
}
int pos = flag1 > flag2 ? flag1 - flag2 : flag2 - flag1;
/*以小数点为中心,进行对齐*/
if (flag1 > flag2)
{
for (i = len1 - 1, j = 0; i >= 0; i --)
{
if (ch1[i] != '.')
{
num1[j++] = ch1[i] - '0';
}
}
for (i = len2 - 1, j = pos; i >= 0; i --)
{
if (ch2[i] != '.')
{
num2[j++] = ch2[i] - '0';
}
}
}
else
{
for (i = len2 - 1, j = 0; i >= 0; i --)
{
if (ch2[i] != '.')
{
num2[j++] = ch2[i] - '0';
}
}
for (i = len1 - 1, j = pos; i >= 0; i --)
{
if (ch1[i] != '.')
{
num1[j++] = ch1[i] - '0';
}
}
}
/*
for (i = 0; i < len1; i++)
{
printf("%d", num1[i]);
}
printf("\n");
for (i = 0; i < len2; i++)
{
printf("%d", num2[i]);
}
printf("\n");
*/
int c = 0;
int s = 0;
for (i = 0; i <= len1 + len2; i++)
{
s = num1[i] + num2[i] + c;
sum[i] = s % 10;
c = s / 10;
}
for (i = len1 + len2 + 1; i >= 0; i--)
{
if (sum[i] != 0)
{
break;
}
}
for (j = 0; j < len1 + len2 + 1; j ++)
{
if (sum[j] != 0)
{
break;
}
}
// printf("i = %d\n", i);
// printf("j = %d\n", j);
if (i == -1)
{
printf("0\n");
continue;
}
int flag = flag1 > flag2 ? flag1 : flag2;
// printf("flag = %d\n", flag);
/*以下是判断小数点的输出位置以及是否需要输出小数点*/
if (flag == 0)
{
for (; i >= 0; i--)
{
printf("%d", sum[i]);
}
printf("\n");
}
else
{
if (flag > i)
{
printf(".");
for (i = flag; i >= j; i--)
{
printf("%d", sum[i]);
}
printf("\n");
}
else if (flag == i)
{
if (j < flag)
{
printf("%d", sum[i]);
printf(".");
for (i = flag -1 ; i >= j; i--)
{
printf("%d", sum[i]);
}
printf("\n");
}
else
{
printf("%d\n", sum[i]);
}
}
else
{
if (flag > j)
{
for (; i >= flag; i--)
{
printf("%d", sum[i]);
}
printf(".");
for (i = flag-1; i >= j; i--)
{
printf("%d", sum[i]);
}
printf("\n");
}
else if (flag == j)
{
for (; i >= j; i --)
{
printf("%d", sum[i]);
}
printf("\n");
}
else
{
for (; i >= flag; i--)
{
printf("%d", sum[i]);
}
printf("\n");
}
}
}
}
return 0;
}