PAT (Basic Level) Practise (中文)1026. 程序运行时间
来源:互联网 发布:数据信息加工 编辑:程序博客网 时间:2024/05/16 17:51
要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。同时还有一个常数CLK_TCK,给出了机器时钟每秒所走的时钟打点数。于是为了获得一个函数f的运行时间,我们只要在调用f之前先调用clock(),获得一个时钟打点数C1;在f执行完成后再调用clock(),获得另一个时钟打点数C2;两次获得的时钟打点数之差(C2-C1)就是f运行所消耗的时钟打点数,再除以常数CLK_TCK,就得到了以秒为单位的运行时间。
这里不妨简单假设常数CLK_TCK为100。现给定被测函数前后两次获得的时钟打点数,请你给出被测函数运行的时间。
输入格式:
输入在一行中顺序给出2个整数C1和C1。注意两次获得的时钟打点数肯定不相同,即C1 < C2,并且取值在[0, 107]。
输出格式:
在一行中输出被测函数运行的时间。运行时间必须按照“hh:mm:ss”(即2位的“时:分:秒”)格式输出;不足1秒的时间四舍五入到秒。
输入样例:123 4577973
输出样例:
12:42:59
下边的代码之前的版本是:变量类型都为 int,输出格式 %02d,5个验证点,有三个结果不正确。换成 unsigned int,%02u,就通过了。
猜测出错的原因可能是:在 online judge 的平台上,int类型分配到的字节并不是4字节,比如2字节,就不符合 “取值在[0, 10^7]” 的条件了。
#include<stdio.h>int main(){ unsigned int C1, C2, sum, ss, mm, hh;scanf("%u%u",&C1, &C2);sum = C2 - C1;sum = ((sum/10)%10)>4 ? ((sum/100)+1) : (sum/100);ss = sum%60;mm = (sum/60)%60;hh = ((sum/60)/60)%100;printf("%02u:%02u:%02u\n", hh, mm, ss);return 0;}
int类型比较特殊,具体的字节数同机器字长和编译器有关。如果要保证移植性,尽量用__int16 __int32 __int64吧
__int16、__int32这种数据类型在所有平台下都分配相同的字节。所以在移植上不存在问题。
所谓的不可移植是指:在一个平台上编写的代码无法拿到另一个平台上运行时,不能达到期望的运行结果。
例如:在32为平台上(所谓32位平台是指通用寄存器的数据宽度是32)编写代码,int 类型分配4个字节,而在16位平台是则分配2个字节,那么在16位上编译出来的exe,
其中是为int分配2字节,而在32位平台上运行时,会按照4个字节来解析,显然会出错误的!!
而对于非int行,目前为止,所有的类型分配的字节数都是兼容的,即不同平台对于同一个类型分配相同的字节数!!
建议:在代码中尽量避免使用int类型,根据不同的需要可以用short,long,unsigned int 等代替。
下面是各个类型一览表【转】
64位指的是cpu通用寄存器的数据宽度是64位的。
数据类型名称字节数别名取值范围int*signed,signed int由操作系统决定,即与操作系统的"字长"有关unsigned int*unsigned由操作系统决定,即与操作系统的"字长"有关__int81char,signed char–128 到 127__int162short,short int,signed short int–32,768 到 32,767__int324signed,signed int–2,147,483,648 到 2,147,483,647__int648无–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807bool1无false 或 truechar1signed char–128 到 127unsigned char1无0 到 255short2short int,signed short int–32,768 到 32,767unsigned short2unsigned short int0 到 65,535long4long int,signed long int–2,147,483,648 到 2,147,483,647long long8none (but equivalent to __int64)–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807unsigned long4unsigned long int0 到 4,294,967,295enum*无由操作系统决定,即与操作系统的"字长"有关float4无3.4E +/- 38 (7 digits)double8无1.7E +/- 308 (15 digits)long double8无1.7E +/- 308 (15 digits)wchar_t2__wchar_t0 到 65,535类型标识符类型说明长度
(字节)范围备注char字符型1-128 ~ 127-27 ~ (27 -1)unsigned char无符字符型10 ~ 2550 ~ (28 -1)short int短整型2-32768 ~ 327672-15 ~ (215 - 1)unsigned short int无符短整型20 ~ 655350 ~ (216 - 1)int整型4-2147483648 ~ 2147483647-231 ~ (231 - 1)unsigned int无符整型40 ~ 42949672950 ~ (232-1)float实型(单精度)41.18*10-38 ~ 3.40*10387位有效位double实型(双精度)82.23*10-308 ~ 1.79*1030815位有效位long double实型(长双精度)103.37*10-4932 ~ 1.18*10493219位有效位
参考了:http://www.cppblog.com/xyjzsh/archive/2010/10/20/130554.html
- PAT (Basic Level) Practise (中文)1026. 程序运行时间
- PAT (Basic Level) Practise (中文)1026. 程序运行时间(15)
- PAT (Basic Level) Practise (中文) 1026. 程序运行时间(15)
- PAT (Basic Level) Practise (中文)1026. 程序运行时间(15) C语言
- PAT (Basic Level) Practise (中文)1026. 程序运行时间(15)
- PAT (Basic Level) Practise (中文) 1026. 程序运行时间(15)
- PAT (Basic Level)1026. 程序运行时间
- PAT (Basic Level) Practise (中文)
- PAT (Basic Level) Practise (中文)
- PAT (Basic Level) Practise (中文)--1001
- PAT (Basic Level) Practise (中文)
- PAT (Basic Level) Practise (中文)1001
- PAT (Basic Level) Practise (中文)1002
- PAT (Basic Level) Practise (中文) 1007
- PAT(Basic Level)_1026_程序运行时间
- PAT BASIC LEVEL 1026. 程序运行时间(15)
- Pat(Basic Level)Practice--1026(程序运行时间)
- PAT (Basic Level) Practise (中文)—— 1004. 成绩排名
- C++11中的匿名函数(lambda函数,lambda表达式)
- 调查:除了钱之外,员工最想要什么?
- 嵌入式linux下如何设置开机就启动自己的应用程序
- sql之left join、right join、inner join的区别
- 二叉排序树
- PAT (Basic Level) Practise (中文)1026. 程序运行时间
- list删除和挑选
- WordPress更改固定链接出现404错误
- 访问控制
- vimtutor总结
- Yii框架实现MySQL多库和主从分离
- 详细配置说明||Spring 使用注解方式进行事务管理
- LDAP的SizeLimitExceededException
- Android Native Development Kit (NDK)