[转]小技巧

本文提供了一系列编程挑战解决方案,包括不使用条件语句实现数值符号判断、巧妙计算最大最小值、循环输出特定序列以及设计限流类等。这些技巧有助于提高编程效率和代码质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、实现一个函数int sign(INT32 x),对x>0返回1;x==0返回0;x<0返回-1。不允许用任何形式的判断,分支,跳转指令或语句。

(1) return x*2/(|x|+1)。

缺点是有溢出的风险,x的值不能太大。或者将X转化成64位的值来临时存储处理。

(2) return (x>0) - (x&0x80000000 == 0x800000000)。

这个依赖于bool和整形之间的转换,不知道true转换成1是不是c/c++标准定义。

2、a,b不进行比较,输出最大,最小值。

(1) int max(int a, int b) : return (a+b+abs(a-b))/2;

int min(int a, int b) : return (a+b-abs(a-b))/2;

(2) 如果ab皆为正整数的话:

max(a,b): int array[2] = {a,b}; return array[b/a];

min(a,b): int array[2] = {a,b}; return array[a/b];

3 、只允许使用一个循环先输出1至10内的奇数然后输出其中的偶数结果应该是这样的:135792468

(1) for (int i=0; i<9; i++)

{

int a = 2*i+1;

if (a <= 9 )

cout<<a%10

else

cout<<a%9

}

(2)for (int i=1; i<10; i+=2)

{

count i;

if (i==9) i = 0;

}

4、求除8余数的简化方法

a&7; 对于 b=2的冥,求a处以b的余数都可以用 a&(b-1)

2、(迅雷笔试题)迅雷进行一个活动,这个活动需要客户端访问我们服务器。但活动为了限制访问量,做了如下规定,那就是每一个帐户在3600秒内只能参加不多于5次。请实现类c_user_enabled,完成此限制功能。
类接口定义:
Class c_user_enabled
{
Public:
Bool init();
Bool is_user_enabled(string user_name);// user_name表示用户帐户标识
Bool destroy();
};

附:
需要考虑线程安全
可以使用stl.
可以使用如下的一个hash函数:
Unsigned str_hash(string str);
可以使用如下锁:
Class c_lock
{
Public:
Void lock();
Void unlock();
Private:
…;
};


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/longhuihu/archive/2010/07/19/5746224.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值