腾讯2014春季笔试题:double数的解析
来源:互联网 发布:mac如何打出罗马数字 编辑:程序博客网 时间:2024/04/19 22:08
根据下面对double数的定义,编写一个函数去parse一个字符串至double
double数指数部分(即e/E后面的数字),若没有应该为false,但是照这图画的意思,e/E后面若不跟数字也可以。下面的程序则处理为false
- #include <stdio.h>
- #include <assert.h>
- #define bool int
- #define false 0
- #define true 1
- bool isNum(const char ch)
- {
- if ((ch<='9')&&(ch>='0'))
- return true;
- else
- return false;
- }
- bool ParseNumber(const char *s, double *d)
- {
- int i = 0;
- int a = 0, b = 0;
- double c = 0.0, f = 10.0; // -a.cE(e)(+/-)b
- int flag1 = 1, flag2 = 1; // 1表示正,-1表示负
- if (s[i] == '-') {
- flag1 = -1;
- i++;
- }
- if (s[i] == 0) {
- i++;
- }
- else if ((s[i]<='9') && (s[i]>='1')) {
- a += s[i] - '0';
- while (isNum(s[++i])) {
- a = a*10 + s[i] - '0';
- }
- }
- if (s[i] == '.') {
- while (isNum(s[++i])) {
- c += (s[i]-'0')/f;
- f *= 10.0;
- }
- }
- if ((s[i] == 'e') || (s[i] == 'E')) {
- i++;
- if (s[i] == '+') {
- i++;
- }
- else if (s[i] == '-') {
- flag2 = -1;
- i++;
- }
- if (!isNum(s[i])) //e(E)后面没有数字则错误
- return false;
- while (isNum(s[i])) {
- b = b*10 + s[i] - '0';
- i++;
- }
- }
- if (s[i] == '\0') {
- c += a;
- if (flag1 == -1)
- c = -c;
- if (flag2 == -1) {
- while (b--)
- c /= 10.0;
- }
- else {
- while (b--)
- c *= 10.0;
- }
- *d = c;
- return true;
- }
- else
- return false;
- }
- int main(void)
- {
- double d;
- assert(ParseNumber("10.25e+12", &d));
- assert(d == 10.25e+12);
- assert(!ParseNumber("101.01e-", &d));
- return 0;
- }
0 0
- 腾讯2014春季笔试题:double数的解析
- 腾讯2014春季笔试题:double数的解析
- 腾讯2014年春季笔试题
- 腾讯2017年春季笔试 求基因碱基的逆序数
- 腾讯2014春季实习生招聘 笔试题目 第一批次
- 2017春季笔试题
- 腾讯实习生笔试编程题--数的分解
- 腾讯2014笔试题
- 2014腾讯笔试题
- 腾讯2012实习生笔试题+答案解析
- 腾讯2012实习生笔试题+答案解析
- 腾讯2012实习生笔试题+答案解析
- 腾讯2012实习生笔试题+答案解析
- 腾讯2012实习生笔试题+答案解析
- 腾讯2012实习生笔试题+答案解析
- 腾讯2012实习生笔试题+答案解析
- 腾讯2012实习生笔试题+答案解析
- 腾讯的一套笔试题
- 腾讯2014年实习生招聘试题
- HDMI输入分辨率转换碰到的问题
- Video4Linux
- 公约数和公倍数
- Spring Aspect的Execution表达式
- 腾讯2014春季笔试题:double数的解析
- jquery each实现均衡元素的高度
- 字符串匹配KMP算法
- Binomial Coeffcients 历届山东省省赛题
- 2014腾讯实习笔试
- Linux内核文档翻译
- 笔试常见的智力题(附答案)
- 微信定制开发怎么做?
- 安卓调用activity时空指针错误