hdoj上的一题和程序设计第二次作业的拓展-人见人爱a+b
2016-02-25 17:34
239 查看
人见人爱a+b
#include<stdio.h> int main() { int n,i,j,a1,a2,a3,b1,b2,b3,c1=0,c2=0,c3=0;//c1记录小时,c2记录分钟,c3记录秒; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d%d%d%d%d%d",&a1,&a2,&a3,&b1,&b2,&b3); c3=a3+b3; if(c3>=60) { c3=c3-60; c2++;//分钟+1; } c2=c2+a2+b2; if(c2>=60) { c2=c2-60; c1++;//小时+1; } c1=c1+a1+b1; printf("%d %d %d\n",c1,c2,c3); c1=0; c2=0; c3=0; } return 0; }
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/23/81ecf367d208fc579cda8c2660286115.png)
这题蛮有意思的,与往常的a+b题目不同,这里的a和b有一定的范围,它和时间计数的小时分钟秒类似,其中的分钟和秒的具体范围是
0-60,于是相加以后就要判断有没有超出范围,有的话小时+1或者分钟+1。
一、A+B*C
要求:输入均为整数,数值范围在(-1000000,1000000)之间。
代码如下:
#include <stdio.h> int main() { int a, b,c,n; scanf("%d %d %d",&a,&b,&c); n=a+b*c; if(n<0) { printf("-");//输出“-”号 n=-n;//取其绝对值 } if(n<1000) printf("%d\n",n ); else if(n<1000000) printf("%d,%03d\n",n/1000,n%1000 ); else printf("%d,%03d,%03d\n",n/1000000,n%1000000/1000,n%1000 );//判断n的范围,用0补充位数 return 0; }
A+B*C的做法与第二次作业的做法类似,用n来记录
a+b*c的值,首先取其绝对值,如果是负数输出
-号;再进行范围判断,通过
%03d来补充位数。
二、A+B/C
要求:输入均为整数,数值范围在(-1000000,1000000)之间。保留两位小数。
代码如下:
#include<stdio.h> int main() { int a,b,c,intn=0,intp=0; double dout=0,doum=0; scanf("%d%d%d",&a,&b,&c); intn=a+b*1.0/c;//n is int; mistake: b*1.0/c; dout=a+b*1.0/c;//t is double; mistake: b*1.0/c; doum=dout-intn;//doum : decimal intp=doum*100;//intp : (int)decimal*100 if(intp<0)intp=-intp;// |intp|; if(intn<0) { printf("-"); intn=-intn; } if(intn<1000) printf("%d",intn ); else if(intn<1000000) printf("%d,%03d",intn/1000,intn%1000 ); else printf("%d,%03d,%03d",intn/1000000,intn%1000000/1000,intn%1000 ); printf(".%02d",intp);//print the part of decimal return 0; } //-10 1 3 //-10 1 4 //-1000000 1 3 //1000000 1 4 //-1000 9 1
要求二相对要求一和之前的题目来说更难一些,我简单的阐述一下我的思路:
我定义整形变量intn和intp,intn来存储
a+b/c的整数部分,intp来存储
a+b/c的小数*100,也就是说我输出的时候,整数部分交由之前的方法处理,输出整数部分以后输出
.和intp的绝对值。
取小数部分的做法:我先用一个int变量intn存储
a+b/c的值,再用double类型的变量dout存储
a+b/c的值,用两个值作差来得到小数部分,用double类型的doum来存储,最后intp把
doum*100存储(相当于小数点后两位的数字)。
还有一个注意点是,最后我输出的格式:
printf(".%02d",intp);用0补充位数。
遇到的问题:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/23/1a30f2974790d7d7879e878cf73e8f7a.png)
在之前的代码里,我在给intn赋值的语句是:
intn=a+b/c,这这导致b/c的计算结果是0,而不是我想要的0.33。
改进:
intn=a+b*1.0/c
通过这一类型的题目,让我巩固了一些遗漏的知识点。
a+b看似很简单,但是其中的题目还是隐藏着“杀机”。
2016/2/26
相关文章推荐
- 作用域学习--------this
- std::min and std::max
- handler 复习
- 多线程互斥
- Bitmap对象在内存中的大小和转化为字节流的大小
- Javascript—XPATH技术解析XML
- 将EXCEL自定义时间格式转换为时间格式
- jackson依赖的jar包
- idapython让生活变得更美好:第五部分
- idapython让生活变得更美好:第四部分
- 笔记本电脑关闭小键盘(即打字按P出现星号键)
- 从TCP协议的原理来谈谈rst复位攻击
- Android应用开发中Fragment与Activity间通信示例讲解
- 校园网&openwrt记(二)应用的大体设计
- HTTP method POST is not supported by this URL
- PAT (Basic Level)1015. 德才论
- ANDROID安卓activity与fragment,activity之间互相传值(二)
- javascript 中的arguments.callee
- idapython让生活变得更美好:第二部分
- idapython让生活变得更美好:第三部分(条件断点)