某公司面试试题答案

小写转大写金额存储过程[SQL SERVER]

一、写一个程序,语言不限,打印出100的阶乘(即1*2*3*…*100)。

答案:

        /// <summary>
        /// 定义每个数组存储的最大值
        /// </summary>
        const int UNIT=100;
        /// <summary>
        /// 定义数组的最大位置
        /// </summary>
        static int count=1;

 

        /// <summary>
        /// 阶乘方法
        /// </summary>
        /// <param name="n">输入的阶乘数</param>
        public static void Factorial(int n)
        {
            ///分配临时空间
            int[] array=new int[100];
            ///初始化数组0位的值
            array[0]=1;
            count=1;
            while(n>0)
            {
                Dohandle(array,n);
                n--;
            }
            Console.WriteLine("Count="+count);
            ///打印数据
            Console.Write("结果=");
            for(int i=count;i>-1;i--)
            {
                Console.Write(array[i].ToString("00"));
            }
            //结果
=933262154439441526816992388562667004907159682643816214685929638952175999932
2991560894146397615651828625369792082722375825118521091686400000000000000000
0000000
        }
        /// <summary>
        /// 处理阶乘
        /// </summary>
        /// <param name="array">数组</param>
        /// <param name="n">要乘的数</param>
        private static void Dohandle(int[] array,int n)
        {
            for(int i=count;i>-1;i--)
            {
                array[i]*=n;
                ///如果超出最大存储的值
                if(array[i]>UNIT)
                {
                    //进位
                    array[i+1]+=array[i]/UNIT;
                    array[i]=array[i]%UNIT;
                    ///count记住数组最大位置
                    if(i>=count)
                    {
                        count=i+1;
                    }
                }
            }
        }

 

二、写一个程序,语言不限,能将人民币金额从阿拉伯数字转换为大写汉字表示。例如,把1234.56转换为壹仟贰佰叁拾肆圆零伍角陆分。

答案:

/// <summary>
        /// 转换money
        /// </summary>
        /// <param name="money">输入money</param>
        public static void TransformMoney(string money)
        {
            ///定义大写数组
            string[] odxc={"分","角","圆","拾","佰","仟","万","拾","佰","仟
","亿","拾","佰","仟","万","拾","佰","仟","亿"};
            string[] odxs={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖
"};
            string result="";
            //舍去小数点两位
            Decimal temp=Convert.ToDecimal(money);
            money=temp.ToString(".00");
            //除去小数点
            money=money.Replace(".","");
            int len=money.Length;
            if(len>odxc.Length)
            {
                Console.WriteLine("error:超过最大金额");
                return;
            }
            //转换大写
            for(int i=0;i<len;i++)
            {
                int v=Convert.ToInt32(money.Substring(i,1));
                result+=odxs[v]+odxc[len-i-1];
            }
            Console.WriteLine(result);
            //if(dot+2)
        }

 

三、在SQL Server 数据库中,有一个表StudentAchievement(学生成绩),它有三个字段:StudentID(varchar(8),学生编号),CourseID(varchar(10),课程编号),Achievement(int ,成绩),写一条SQL语句,筛选出每门课程的前两名的学生编号,课程编号,成绩并排序。

答案:

Select CourseID, Achievement, StudentID  from StudentAchievement a

where StudentID in(select top 2 b.StudentID from StudentAchievement b

       where b.CourseID=a.CourseID order by Achievement desc)

order by courseid, Achievement desc

 

四、编程实现求出若干个整数之和为500的连续整数(如98,99,100,101,102),所有组合。

public static void NumberSum(int num)
        {
            for(int i=1;i<num;i++)
            {
                int result=0;
                int start=i;
                while(result<num)
                {
                    result+=start;
                    start++;
                }
                ///判断结果等于num
                if(result==num)
                {
                    while(start>=i)
                    {
                        Console.Write(start +" ");
                        start--;
                    }
                    Console.WriteLine();
                }
            }
        }
        //结果:33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14
13 12 11 10 9 8
        //      67 66 65 64 63 62 61 60 59
        //      103 102 101 100 99 98
 }

 

五、谈谈你对多层架构的认识(限150字)。
N层架构是将应用程序分成多个独立的逻辑部分,利用分层的方式处理复杂的系统。层
次系统要求上层可使用下层的功能,而下层是不能使用上层的功能。主要优点:透明和
封装;高内聚、低耦合;易于扩展、维护和重用;人员易分工。缺点:效率低;开发难
度大。
通常做法是三层:Web表述、业务、数据访问,扩展:Web、业务外观、业务规则、数据
访问、实体层、组件等层次。

六、谈谈你对面向对象的认识(限150字)。
     对象是建立面向对象程序所依赖的基本单元。所谓对象就是一种代码的实例,这
种代码执行特定的功能,具有自包含或者封装的性质。这种封装代码通常叫做类、对象
类 。优点是:对象可重用性、可继承。每个对象中可有下列成员:构造、析构、方
法、属性、变量、事件、委托、索引。
    面向对象基础主要有 抽象、封装、多态、继承 、 接口 这些概念

posted @ 2005-07-04 11:38  Elaine Shi  阅读(1144)  评论(1编辑  收藏  举报