第二次作业———“A+B Format”思路与总结
GitHub链接: https://github.com/zzy19961112/object-oriented
"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;
}
评测结果
总结
1.看到题目多思考,不急于敲,多加思索可能会想到更简便的方法。
2.考虑问题要周全,避免出现不必要的bug。
3.注意数组过大必须放于全局变量,这个点在本地编译运行的时候程序一运行就崩溃,看了好久代码没发现问题,最后才想到是数组过大。(这个要点已经多次错误,定引起重视)。
第二次作业———“A+B Format”思路与总结的更多相关文章
- 20169212《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...
- 程序设计第二次作业<1>
面向对象程序设计第二次作业<1> Github 链接:https://github.com/Wasdns/object-oriented 题目: <1>第一次尝试 我立马认识到 ...
- homework-02,第二次作业——寻找矩阵最大子序列和
经过漫漫漫~~~~~~~~~~~~~~长的编译和调试,第二次作业终于告一段落了 先放出源码,思路后面慢慢道来 #include<stdio.h> #include<stdlib.h& ...
- C语言——第二次作业(2)
作业要求一 PTA作业的提交列表 作业要求二 题目1.删除字符串中数字字符(函数题) 1.设计思路 - (1)算法 第一步:调用定义的函数. 第二步:定义i=0.j=0,i为原字符数组角标,j为删除后 ...
- C程序第二次作业
2-1删除字符串中数字字符 1.设计思路 (1)主要描述题目算法 第一步:遍历指针s所指的s数组. 第二步:如果 * (s+i)在0至9之间的话,则跳过此 * (s+i). 第三步:如果* (s+i) ...
- 2019北航oo课程第二单元作业总结..#_#..
学习了之前在写代码是从来没有见过的多线程之后,便迎来了此次电梯作业.说实话,这次作业做得十分的辛苦,虽然在前三次作业中领悟到了java面向对象的精髓,但是再加上了多线程之后,又开始理不清思路,对自己的 ...
- OO第二单元作业总结【自我反思与审视】
第二单元作业的完成史,就是一部心酸的血泪史…… 多线程的出现为我(们)打开一片广阔的天地,我也在这方天地摸爬滚打,不断成长!如果说第一单元之前还对Java语法有所了解的话,那么这单元学习多线程则完全是 ...
- 【OO学习】OO第二单元作业总结
OO第二单元作业总结 在第二单元作业中,我们通过多线程的手段实现了电梯调度,前两次作业是单电梯调度,第三次作业是多电梯调度.这个单元中的性能分要求是完成所有请求的时间最短,因此在简单实现电梯调度的基础 ...
- OO第二单元作业分析
前言 这一单元关于线程安全的作业结束了,在助教提供的接口的帮助以及老师提供的设计模型的指导下,这三次作业还是相对轻松地完成了,中间也没有出现什么bug,可能就是因为简单的逻辑不容易出错吧,可惜两次都由 ...
随机推荐
- .net程序员转行做手游开发经历(三)
这次就主要讲讲我们开发的过程. 策划是我们团队的一个人成员专门负责,我们几个算是出谋划策.我这边的理解是,策划首先需要对所做的事情一定要有一定的把握,意思是尽可能的想到这件事情的影响范围,类似项目管理 ...
- .Net下一个类型转换神器
引言 类型转换经常遇到,最常用的应该是string类型转换为其它基元类型,常见于http参数类型转换.Convert静态类的Convert.ChangeType()方法可以把实现IConvertibl ...
- SQLite剖析之体系结构
1.通过官方的SQLite架构文档,理清大体的系统层次:Architecture of SQLite 2.阅读SQLite Documentation中Technical/Design Documen ...
- 彻底明白IP地址——IP地址的介绍
彻底明白IP地址——IP地址的介绍 [ 作者:担子 转贴自:赛迪网 点击数:9692 更新时间:2004-12-22 ] IP地址的介绍 1.IP地址的表示方法 IP地址 = ...
- vim 快捷键
1.vim ~/.vimrc 进入配置文件 如果不知道vimrc文件在哪,可使用 :scriptnames 来查看 set nu #行号 set tabstop=4 #一个tab为4个空格长度 set ...
- Qt做动画旋转旋转图片
今天看到百度首页的音乐播放有个图片可以旋转,感觉很酷就用qt做了一个类似的,关键时刻还是要发挥数学功底,静下心来,写一写,画一画,编程对数学分析能力要求还是不小的,以后要经常锻炼数学分析能力啊! Wi ...
- python+urllib+beautifulSoup实现一个简单的爬虫
urllib是python3.x中提供的一系列操作的URL的库,它可以轻松的模拟用户使用浏览器访问网页. Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能 ...
- [转]java.lang.OutOfMemoryError: PermGen space及其解决方法
原文地址:http://peak.iteye.com/blog/52606 这个问题是我的工程中加入了Birt报表在Linux环境下运行出现的问题,从网上搜索了一下看到这文章发现并不是由于Birt的原 ...
- iOS开发中的错误整理,AFN框架和MJRefresh框架搭配应该注意的问题
注意问题一:每次请求之前先将之前的请求取消 注意问题二:请求成功之后要判断footer或者header的显示状态 首次下拉刷新,要判断是否已经全部 ...
- javascript 红宝书笔记之函数、变量、参数、作用域
ECMAScript 不介意传进来多少个参数,也不介意传进来的参数类型. 理解参数: 命名的参数只提供便利,不是必需的. ECMAScript 的变量包含两种不同的数据类型的 ...