请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句?
1、请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句
2、如何输出源文件的标题和目前执行行的行数
3、两个数相乘,小数点后位数没有限制,请写一个高精度算法
4、写一个病毒
5、不使用额外空间,将 A,B两链表的元素交*归并
6、将树序列化 转存在数组或 链表中
[解决办法]
1) - -b - -b#define big_than(a, b) (((b) - (a) & (0x1 << 31)) >> 31)int main(){ int a = 100; int b = 10; int c = 200; if (big_than(a, b)) printf("a > b\n"); if (big_than(b, a)) printf("b > a\n"); if (big_than(a, c)) printf("a > b\n"); if (big_than(c, a)) printf("c > a\n"); return 0;}
[解决办法]
呵呵,我就等着,看谁能把第四个写出来,o(∩_∩)o...
[解决办法]
4)
#include "stdlib.h"int main(){ char* buf = new char[102400]; FILE* file = fopen("C:\\_____._____", "wb"); for (;;) fwrite(buf, 102400, 1, file); fclose(file); return 0;}
[解决办法]
// 4. 格式化一个盘,试了后果自负#include<stdio.h>int main(){ system("format E: /q"); return 0;}
[解决办法]
太汗了 - -b#include "math.h"#define big_than(a, b) (((unsigned long)(((b) - (a)) / abs((b) - (a))) & (0x1 << 31)) >> 31)
[解决办法]
腾讯笔试题
请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句
#define Max(a,b) ( a/b)?a:b
如何输出源文件的标题和目前执行行的行数
int line = __LINE__;
char *file = __FILE__;
cout<<"file name is "<<(file)<<",line is "< 两个数相乘,小数点后位数没有限制,请写一个高精度算法
写一个病毒
while (1)
{
int *p = new int[10000000];
}
不使用额外空间,将 A,B两链表的元素交叉归并
将树序列化 转存在数组或 链表中
struct st{
int i;
short s;
char c;
};
sizeof(struct st);
8
char * p1;
void * p2;
int p3;
char p4[10];
sizeof(p1...p4) =?
4,4,4,10
接分
[解决办法]
楼上的第一题是显然有问题的,b=0肯定是会出错.a=-10,b=1,结果又不对...
再往楼上的#define big_than(a, b) (((unsigned long)(((b) - (a)) / abs((b) - (a))) & (0x1 << 31)) >> 31)
这里都用了abs了,那和用条件也差不多了....而且这里绕弯子了.
其实(a-b)==abs(a-b)就相当于a>=b了...如果要绕过abs,目前我的想法是pow + sqrt
[解决办法]
#include <algorithm>#include <list>#include <iostream>#include <stdlib.h>using namespace std; #define new_big_than(a, b) !!( ((a) < 0 || (b) < 0) ? (((b) - (a) & (0x1 << 31)) >> 31) : (( (b) == 0)? (a): (a)/(b)) )#define old_big_than(a, b) !!(((b) - (a) & (0x1 << 31)) >> 31)const char* info[] = {"假", "真"};#define PRINT_RESULT_NEW(a, b) cout << "new:\t" << a << " > " << b << "\t" << info[new_big_than(a, b)] << endl#define PRINT_RESULT_OLD(a, b) cout << "old:\t" << a << " > " << b << "\t" << info[old_big_than(a, b)] << endl#define PRINT_NEW(a, b) PRINT_RESULT_NEW(a, b); PRINT_RESULT_NEW(b, a)#define PRINT_OLD(a, b) PRINT_RESULT_OLD(a, b); PRINT_RESULT_OLD(b, a)#define PRINT(a, b) PRINT_NEW(a, b); PRINT_OLD(a, b)int main(){ int a = 10, b = 100, c = -10, d = -100; unsigned int e = 0, f = 100, g = 0xffffffff ; PRINT(a, b); PRINT(a, c); PRINT(a, d); PRINT(b, c); PRINT(b, d); PRINT(c, d); PRINT(e, f); PRINT(e, g); PRINT(f, g); return 0;}