打印

百度算法面试题

[复制链接]
1863|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gxgclg|  楼主 | 2012-5-22 21:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题目如下:
在一个字符数组里面从左往右查找最早出现的连续数字字符,并转换为64位int型输出。包括正负号。首位字符为‘-’则为负数,首位不是‘-’则为正数。
例如:
字符串为“-sd13456fdfs4590fghf”,则输出数字-13456
字符串为“erwrw13456423424590fghf45353”,则输出数字13456423424590
因为输出的数字为64位,所以范围为-2^63~2^63-1。假如要输出数字超出此范围,则直接返回0,否则返回要输出的数字。

long long converse(const char *str)
{








}

相关帖子

沙发
yybj| | 2012-5-22 21:43 | 只看该作者
lz可以参考下面的程序:
long longconverse(const char *str)
{long result=0;
bool sgn;
if(str[0]=='-'){sgn=false;} else{sgn=true;}
int i=0;
while(str[i])!='\0')
{ while(str[i]>='0'||str[i]<'=9')
  {result=result*10+str[i]-'0';
  if(result<0){return 0;}
  i++;
  }
  if(result<>0)
  {return sgn?result:0-result;}
i++;
}

}

使用特权

评论回复
板凳
xsgy123| | 2012-5-23 14:29 | 只看该作者
这题目还是很有难度的

使用特权

评论回复
地板
火箭球迷| | 2012-5-23 14:38 | 只看该作者
2楼的程序可行

使用特权

评论回复
5
shenmu2012| | 2012-5-23 18:11 | 只看该作者
看好2楼的程序啊

使用特权

评论回复
6
xsgy123| | 2012-5-23 21:29 | 只看该作者
2楼的程序应该是正确的

使用特权

评论回复
7
firstblood| | 2012-5-24 11:34 | 只看该作者
数字过滤啊,外加屏蔽后边数字的,不是很难的 啊

使用特权

评论回复
8
firstblood| | 2012-5-24 11:38 | 只看该作者
2楼的程序可以将字符串中第二次再出现的数字给过滤掉么?如:字符串为“erwrw13456423424590fghf45353”,则输出数字13456423424590
需要滤掉45353,像是少了这一步的啊

使用特权

评论回复
9
秋天落叶| | 2012-5-24 22:51 | 只看该作者
很基础的一道题

使用特权

评论回复
10
hsbjb| | 2012-5-25 16:00 | 只看该作者
求更多的百度面试题

使用特权

评论回复
11
xsgy123| | 2012-5-25 16:07 | 只看该作者
LS可以自己再搜搜,这类面试题应该很容易搜到的

使用特权

评论回复
12
gxgclg|  楼主 | 2012-5-25 23:06 | 只看该作者
多做一些这样的面试题,对找工作还是很有帮助的

使用特权

评论回复
13
397090770| | 2012-8-1 15:10 | 只看该作者
2# yybj
经坚定此程序是错误的!我最少检查出三处错误。其一:当你的程序参数为NULL你的程序会怎么样??其二:你返回的为long long,但是你的result定义为long 。其三:while(str>='0'||str<'=9')这个你能检测出str只是数字吗??请你贴出代码前自己先运行一下行不。。。别误人家子弟。。。


下面是我写的。
long long findFirstNumber(const char *str){
        if(str == NULL){
                return 0;
        }
       
        int flags = 0;
       
        if(str[0] == '-'){
                flags = 1;       
        }
        int i = 0;
        long long sum = 0;
        bool findNum = false;
        while(str[i]){
                if(str[i] >= '0' && str[i] <= '9'){
                        findNum = true;
                        while(str[i] >= '0' && str[i] <= '9'){
                                sum = sum * 10 + str[i] - '0';
                                if(sum < 0){
                                        return 0;
                                }
                                i++;
                        }
                }else{
                        i++;
                        if(findNum){
                                break;
                        }
                }
               
        }
        return flags?-sum:sum;
}

使用特权

评论回复
14
firstblood| | 2012-8-3 14:53 | 只看该作者
楼上的代码很给力的,建议大家借鉴了的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

177

主题

1653

帖子

1

粉丝