第二次作业———“A+B Format”思路与总结
2016-01-28 16:39
302 查看
题目
解题思路:
一开始粗略看这道题,熟悉的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; }
评测结果
总结
1.看到题目多思考,不急于敲,多加思索可能会想到更简便的方法。
2.考虑问题要周全,避免出现不必要的bug。
3.注意数组过大必须放于全局变量,这个点在本地编译运行的时候程序一运行就崩溃,看了好久代码没发现问题,最后才想到是数组过大。(这个要点已经多次错误,定引起重视)。
相关文章推荐
- org.apache.log4j.Logger 详解 非常详细
- 三种最典型的大数据存储技术路线
- 网站后台数据存储
- 2016年自主建设的产品
- android 时间戳相关
- HDU 2058 The sum problem
- 第二次作业———“A+B Format”思路与总结
- springMvc integrated with springSecurity 常见问题
- 数据恢复流程
- Oracle创建表空间及在指定的表空间上创建数据库的步骤
- python下的tcp,udp服务器端,客户机端
- 生产数据库的安全管理“白名单”
- new的返回值检查
- Android中如何解析JSON数据
- route add 没文化真可怕
- 电缆线径的选择
- Xcode配置OpenGL
- UITableView中Cell重用机制导致内容重复解决方法
- 飞控控制方法学习
- 数列分段