
微软面试题
发布日期:2021-05-09 04:09:39
浏览次数:9
分类:博客文章
本文共 1683 字,大约阅读时间需要 5 分钟。
罗马数字共有七个,即 I(1),V(5),X(10),L(50),C(100),D(500),M(1000)。 按照下面三条规则可以表示任意正整数。 重复数次:一个罗马数字重复几次,就表示这个数的几倍。 右加左减:在一个较大的罗马数字的右边记上一个较小的罗马数字, 表示大数字加小数字。在一个较大的数字的左边记上一个较小的罗 马数字,表示大数字减小数字。但是,左减不能跨越等级。 比如,99不可以用IC表示,用XCIX表示 基本数字Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个,比如40不能用XXXX,而用XL表示 设计一个函数,将100(包括100)以内的整数转换成罗马数字,超过100不考虑 int itor(int n,char* buf,int bufLength) 其中,n是要转换的整数,buf是要输出的字符串,bufLength是buf的字符长度 成功,返回0,否则,返回 -1; 比如: char buf[256]; result = itor(n,buf,sizeof(buf)); when n = 28; result = 0, 输出"XXVIII"; when n = 72; result = 0, 输出"LXXII"; 答案如下: #include <stdio.h>#include <string.h>static const char* a[] ={"","I","II","III","IV","V","VI","VII","VIII","IX"};static const char* b[] ={"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC","C"};static const char* c[] ={"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", "M"};int itor(int n, char *buf, int bufLength){ if (n < 0 || n > 100) return -1; int num1,num2, num3; num1 = n % 10; num2 = (n / 10) % 10; num3 = n / 100; int index = 0; if (strlen(c[num3]) + strlen(b[num2]) + strlen(a[num1]) > bufLength) return -1; strcpy(buf, c[num3]); strcat(buf, b[num2]); strcat(buf, a[num1]); return 0;}int main(int ac, char** av){ int i; char buffer[64] = {0}; scanf("%d", &i); if (itor(i, buffer, 63) == 0) printf("%s\n", buffer);} ###################################################################有一个N*N的矩阵, 里面有N*N个数,这个矩阵的每一行,每一列都是排序好的,下面是一 个例子 1 3 7 9 2 5 13 14 6 7 25 26 20 24 30 40 现在设计一个算法,在这个矩阵中search一个数,要求尽可能快#################################################################### 1、写一个在一百万个数字中求十个最大的数算法 2、已知一个算法是NLog2N的,有没有办法把它搞成O(N) 3、写一个inttochar的函数,int未知长度 4、已知一组数据符合正态分布,如果要排序,用什么算法最快?
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月11日 14时34分32秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!