第一版 源代码
<textarea readonly="readonly" name="code" class="c">
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 1001
void show(char *ch,int len)
{
int i = len;
if (*(ch + i) == 0) printf("0");
else
while (i >= 0)
{
printf("%d", ch[i]);
i--;
}
}
void reverse(char *ch,int len)//翻转是为了进位时输出方便
{
for (int i = 0, j = len; i <= j; i++, j--)//这里应该是<=,防止出现最中间一位没有去除'0'属性
{
int tmp = ch[i] -'0';
ch[i] = ch[j] -'0';
ch[j] = tmp;
}
}
int solve(char *ch1, char *ch2, char *ch3, int len1, int len2)
{
int i = 0, j = 0, k = 0;
while (i <= len1 && j <= len2)
{
int sum = ch1[i] + ch2[j] + ch3[k];
ch3[k + 1] = sum / 10;
ch3[k] = sum % 10;
i++;
j++;
k++;
}
while (i <= len1)
{
int sum = ch1[i] + ch3[k];
ch3[k + 1] = sum / 10;
ch3[k] = sum % 10;
i++;
k++;
}
while (j <= len2)
{
int sum = ch2[j] + ch3[k];
ch3[k + 1] = sum / 10;
ch3[k] = sum % 10;
j++;
k++;
}
if(*(ch3+k)) return k;
else return k - 1;
}
//从低位开始相加,从高位开始输出
int main()
{
int T;
int k = 1;
char *ch1 = (char *)malloc(sizeof(char)*N);
char *ch2 = (char *)malloc(sizeof(char)*N);
char *ch3 = (char *)malloc(sizeof(char)*N);
scanf("%d", &T);
while (k <= T)
{
for (int i = 0; i < N; i++)
{
ch1[i] = 0;
ch2[i] = 0;
ch3[i] = 0;//'\0'
}
scanf("%s %s", ch1, ch2);
int len1 = strlen(ch1) - 1;
reverse(ch1, len1);
int len2 = strlen(ch2) - 1;
reverse(ch2, len2);
int len3 = solve(ch1, ch2, ch3, len1, len2);
getchar();
printf("Case %d:\n", k);
show(ch1, len1);
printf(" + ");
show(ch2, len2);
printf(" = ");
show(ch3, len3);
printf("\n");
if (k != T) printf("\n");
k++;
}
free(ch1);
free(ch2);
free(ch3);
return 0;
}
</textarea>
小结:基础实现了题目要求的功能,但肯定还存在更好的解法和简洁的代码。解题中思路不清晰,结构很乱,导致重写了部分代码。另外关于'\0'和'0'的认知不够清晰(ASCII码)。总的来说,代码实现能力很弱,需要好好练习。