第二次作业———“A+B Format”思路与总结
题目
解题思路
一开始粗略看这道题,熟悉的A+B题目,读完之后就发现略有不同,输出结果的格式要求跟平常所用的计算器的输出格式一样:每三位用一个逗号隔开。此时出来的解题思路便是把每一位的数字存进数组,每隔三位存进一个逗号最后输出。
代码
#include<stdio.h>
#include<string.h>
int main() {
int a, b, temp, sum, i = 0;
char arr[2000005];
scanf("%d%d", &a, &b);
sum = a + b;
temp = sum;
sum = (sum > 0) ? sum : -sum;
while(sum) {
if(i == 3 || i == 7) {
arr[i] = ',';
arr[++i] = sum % 10 + 48;
} else
arr[i] = sum % 10 + 48;
sum /= 10;
i++;
}
strrev(arr);
if(temp < 0) {
printf("-");
printf("%s\n", arr);
} else
printf("%s\n", arr);
return 0;
}
评测结果
编译错误,一开始感觉很奇怪,在本地编译器都能通过,在线测评却连编译都通过不了,看了下错误信息,在23行提示warning,好像是不支持“strrve”函数,所以第二次尝试就用暴力实现数组的反转。
代码
#include<stdio.h>
#include<string.h>
char arr[2000005], ans[2000005];
int main() {
int a, b, temp, sum, length, j, i = 0;
scanf("%d%d", &a, &b);
sum = a + b;
temp = sum;
sum = (sum > 0) ? sum : -sum;
while(sum) {
if(i == 3 || i == 7) {
arr[i] = ',';
arr[++i] = sum % 10 + 48;
} else
arr[i] = sum % 10 + 48;
sum /= 10;
i++;
}
length = strlen(arr);
for(i = 0, j = length - 1; i < length; i++, j--) {
ans[i] = arr[j];
}
if(temp < 0) {
printf("-");
printf("%s\n", ans);
} else
printf("%s\n", ans);
return 0;
}
评测结果
这次编译通过却错误了一个点,回看代码查找错误,在while判断中没有考虑到和为'0'的情况。所以在输出部分更改代码
if(temp == 0)
printf("0");
else if(temp < 0) {
printf("-");
printf("%s\n", ans);
} else
printf("%s\n", ans);
评测结果
成功通过。
但是写这篇博的时候,我突然觉得这种方法好像很麻烦,还动用了数组,理论上在线测评第一题应该不用这么麻烦的,于是我又测试了另一种方法:通过数字的位数来分情况。
代码
#include<stdio.h>
int main() {
int a, b, sum;
scanf("%d%d", &a, &b);
sum = a + b;
if(sum < 0) {
printf("-");
sum = -sum;
}
if(sum >= 1000000) {
printf("%d,%03d,%03d\n", sum / 1000000, (sum / 1000) % 1000, sum % 1000);
} else if(sum >= 1000) {
printf("%d,%03d\n", sum / 1000, sum % 1000);
} else
printf("%d\n", sum);
return 0;
}
评测结果
总结
- 看到题目多思考,不急于敲,多加思索可能会想到更简便的方法。
- 考虑问题要周全,避免出现不必要的bug。
- 注意数组过大必须放于全局变量,这个点在本地编译运行的时候程序一运行就崩溃,看了好久代码没发现问题,最后才想到是数组过大。(这个要点已经多次错误,定引起重视)。
┆ 凉 ┆ 暖 ┆ 降 ┆ 等 ┆ 幸 ┆ 我 ┆ 我 ┆ 里 ┆ 将 ┆ ┆ 可 ┆ 有 ┆ 谦 ┆ 戮 ┆ 那 ┆ ┆ 大 ┆ ┆ 始 ┆ 然 ┆
┆ 薄 ┆ 一 ┆ 临 ┆ 你 ┆ 的 ┆ 还 ┆ 没 ┆ ┆ 来 ┆ ┆ 是 ┆ 来 ┆ 逊 ┆ 没 ┆ 些 ┆ ┆ 雁 ┆ ┆ 终 ┆ 而 ┆
┆ ┆ 暖 ┆ ┆ 如 ┆ 地 ┆ 站 ┆ 有 ┆ ┆ 也 ┆ ┆ 我 ┆ ┆ 的 ┆ 有 ┆ 精 ┆ ┆ 也 ┆ ┆ 没 ┆ 你 ┆
┆ ┆ 这 ┆ ┆ 试 ┆ 方 ┆ 在 ┆ 逃 ┆ ┆ 会 ┆ ┆ 在 ┆ ┆ 清 ┆ 来 ┆ 准 ┆ ┆ 没 ┆ ┆ 有 ┆ 没 ┆
┆ ┆ 生 ┆ ┆ 探 ┆ ┆ 最 ┆ 避 ┆ ┆ 在 ┆ ┆ 这 ┆ ┆ 晨 ┆ ┆ 的 ┆ ┆ 有 ┆ ┆ 来 ┆ 有 ┆
┆ ┆ 之 ┆ ┆ 般 ┆ ┆ 不 ┆ ┆ ┆ 这 ┆ ┆ 里 ┆ ┆ 没 ┆ ┆ 杀 ┆ ┆ 来 ┆ ┆ ┆ 来 ┆