一、写一个程序,语言不限,打印出100的阶乘(即1*2*3*…*100)的数值结果。如5的阶乘是1*2*3*4*5=120。二、写一个程序,语言不限,能将人民币金额从阿拉伯数字转换为大写汉字表示。例如,把1234.56转换为壹仟贰佰叁拾肆圆零伍角陆分。三、编程实现求出若干个整数之和为500的连续整数(如98,99,100,101,102),所有组合。五、谈谈你对多层架构的认识(限150字)。六、谈谈你对面向对象的认识(限150字)。

解决方案 »

  1.   

    1、如果是c的话就只能用数组了,不过我记得vb好像能直接显示出非常长的数字。
    2、转成字符串,然后截取再判断
    3、前两天坛子里有,搜一下
    4、5、仁者见仁,智者见智。
      

  2.   

    有点太菜鸟了,鄙人菜鸟都会这些问题,所以我认为如果你自己不能够根据所学和数据结构写出来的话,我认为你不适合当程序员。
    C
    float Result = 1;
    for(int i = 0;i<100 ; i ++)
    {
        Result = Result * (i + 1);
    }请恕我狂言了。愿你成功。
      

  3.   

    1、主要是注意数据类型的问题,int要溢出
    2、写个汉字的数组,然后一一对应转换
    3、坛子里有
    4/5 具体问题具体分析
      

  4.   

    一、写一个程序,语言不限,打印出100的阶乘(即1*2*3*…*100)的数值结果。如5的阶乘是1*2*3*4*5=120。
    public viod jiecheng(int n)
    {
     string s;
     int jieguo=1;
     bool chenghao=false;
     for (;n>0;n--)
     {
      jieguo*=n;
      if(chenghao==true)s+="*";
      s+=n;
      chenghao=true;
      jieguo=jieguo*n
     }
     s+=jieguo.tostring();
     WriteLine(s);
    }
      

  5.   

    阶乘C++
    int cc(int n)
    {
      int result = 1;
      int count = n;
      while(1<=count)
      {
        result = result * count;
        count--;
      }
      return result;
      
    }
      

  6.   

    public void jisuan()
    {
     int start,result=0;
     for(int n=1; n<500; n++)
     {
      start=n;
      for(int i=n; i<500;i++)
      {
      int resulut+=i;
       if(reslut=500)write(start,i)
       if(reslut>500)break;
      }
     }
    }
    public void write(int start, int i)
    {
     string s="(";
     bool tr=false;
     for(;start<i;start++)
     {
      if(tr)s+=",";
      s+=start.tostring()
     }
     s+=")"
     WriteLine(s);
    }
      

  7.   

    二、写一个程序,语言不限,能将人民币金额从阿拉伯数字转换为大写汉字表示。例如,把1234.56转换为壹仟贰佰叁拾肆圆零伍角陆分。转成字符串,然后截取再判断具体方法名忘了上面一、三题的代码不保证能运行,我是凭印象在notepade里写的,
    正在找工作
      

  8.   

    上面是第三题
    应该这样实现用500整除奇数(x),得到商为偶数(y),
    取(y-(x-1)/2)+ ...+(y-2)+(y-1)+y(y+1)+(y+2)+...+(y+(x-1)/2)这个值就是500
    还有个条件 500/x  > (x-1)/2,否则,就会取道负数。
    程序自己实现吧
      

  9.   

    chaos_blue(chaos) caihanchao(超超) seekg() 
    用你们的windows的自带的计算器看看100!是多少
    9.3326215443944152681699238856267e+157你认为int,long可以存储这么大的数字吗??尤其是chaos_blue(chaos),看看自己的程序,想想自己的话,你才不适合
    不懂就问的基本道理都不知道
    //----------------------------------------------------
    有点太菜鸟了,鄙人菜鸟都会这些问题,所以我认为如果你自己不能够根据所学和数据结构写出来的话,我认为你不适合当程序员。
    C
    float Result = 1;
    for(int i = 0;i<100 ; i ++)
    {
        Result = Result * (i + 1);
    }请恕我狂言了。愿你成功。
    //--------------------------------------------------------
      

  10.   

    不知道对不对,随便写了一个,结果有四组,用C写的#include "stdio.h"
    main(){
    int i,j,k,m;
    for(i=0;i<=500;i++)
    {
        j=i;
        m=i;
        k=0;
        for(j=i;j<=500;j++)
        {
            k=k+j;
            if(k==500)
            {
                printf("num%d\n",k);            for(;m<=j;m++)
                {
                    printf("%d ",m);
                }
                printf("\n\n\n");
            }
        }
    }
    getch();
    }
      

  11.   

    public string Factorial(int k)
    {
    int i = 1;
    string r = "1";
    while(i <= k)
    {
    r = bbb(i.ToString(),r);
    i++;
    }
    return r;
    } public string Add(string a, string b)
    {
    if (a.Length > b.Length)
    {
    int l = 0;
    int k = a.Length - b.Length;
    while(l < k)
    {
    b = b.Insert(0,"0");
    l++;
    }
    } if (a.Length < b.Length)
    {
    int l = 0;
    int k = b.Length - a.Length;
    while(l < k)
    {
    a = a.Insert(0,"0");
    l++;
    }
    } string s = "";
    int t = 0;
    for(int i = a.Length - 1; i >= 0; i--)
    {
    int c = int.Parse(a[i].ToString()) + int.Parse(b[i].ToString()) + t;
    if (c.ToString().Length > 1)
    {
    s = s.Insert(0,c.ToString()[1].ToString());
    t = int.Parse(c.ToString()[0].ToString());
    }
    else
    {
    s = s.Insert(0,c.ToString()[0].ToString());
    t = 0;
    }
    }
    if(t != 0)
    s = s.Insert(0,t.ToString());
    return s;
    } public string Mutiply(string s1,string s2)
    {
    string r = "0";
    for(int i = 0; i < int.Parse(s1); i++)
    r = aaa(r,s2);
    return r;
    }
    }
      

  12.   

    对上面的算法稍微解释一下:
    三个函数,Add是对两个大数的加法运算,全部转换成字符串来实现,Mutiply是乘法,调用的Add来实现,Factorial是阶乘,调用Mutiply来实现
      

  13.   

    还有,用的语言是C#,其中bbb应该换成Mutiply,aaa应该换成Add,测试了一下100!,结果是93326215443944152681699238856266700490715968264381621468592963895217599993229915
    608941463976156518286253697920827223758251185210916864000000000000000000000000
      

  14.   

    潜力贴啊
    呵呵~~~
    阶乘得用double 
    :P
      

  15.   

    第一题很明显是要高精度算法
    普通阶乘难道不显得太简单了吗?    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim result() As Short
            result = GetPoly(1)
            For i As Integer = 1 To 100
                result = PolyMult(result, GetPoly(i))
            Next        Dim sb As New System.Text.StringBuilder()
            For i As Integer = result.Length - 1 To 0 Step -1
                sb.Append(result(i).ToString)
            Next
            MsgBox(sb.ToString.TrimStart("0"c))
        End Sub    Public Function GetPoly(ByVal x As Integer) As Short()
            Dim result() As Short = New Short(x.ToString.Length - 1) {}
            Dim i As Integer = 0
            Do While x > 0
                result(i) = x Mod 10
                x \= 10
                i += 1
            Loop
            Return result
        End Function    Function PolyMult(ByVal a() As Short, ByVal b() As Short) As Short()
            Dim result(a.Length + b.Length - 1) As Short
            For i As Integer = 0 To a.Length - 1
                For j As Integer = 0 To b.Length - 1
                    If a(i) <> 0 Or b(j) <> 0 Then
                        result(i + j) += a(i) * b(j)
                    End If            Next
            Next
            For x As Integer = 0 To result.Length - 1
                Do While result(x) >= 10
                    result(x + 1) += 1
                    result(x) -= 10
                Loop
            Next
            Return result
        End Function
      

  16.   

    100的阶乘等于93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000用4个double也算不出来,不用高精度算法没戏。
      

  17.   

    To lbsong(萝卜头)
    乘法可以高精度实现,无须加法To qiekong(blue) 
    不用递归
      

  18.   

    To Ninputer(装配脑袋) :
    考虑更通用的算法,如果阶乘的数比较大的时候,乘法也不能用高精度数实现了
    比如:10000000000000*10000000000000的时候
      

  19.   

    第三题:结果为3组
    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,
    66,65,64,63,62,61,60,59,
    102,101,100,99,98, Stack stk = new Stack(); int j = 0;
    while(j < 250)
    {
    int r = 0;
    for(int i = j; i < 250; i++)
    {
    r = r + i; if(r < 500)
    stk.Push(i);
    else if(r == 500)
    {
    stk.Push(i);
    int k = 0;
    int count = stk.Count;
    while(k < count)
    {
    int t = (int)(stk.Pop());
    Console.Write(t.ToString() + ",");
    k++;
    }
    j++;
    Console.WriteLine();
    break;

    } else if(r > 500)
    {
    stk.Clear();
    j++;
    break;
    }
    }

    } Console.Read();

    }
      

  20.   

    1.using System;namespace ConsoleApplication1
    {
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    class Class1
    {
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
    //
    // TODO: 在此处添加代码以启动应用程序
    //
    int input=100;
    double temp=1;
    for(int i=1;i<=input;i++)
    {
    temp=temp*i;
    //i+=1;
    Console.WriteLine("temp="+temp.ToString());
    Console.WriteLine("I="+i.ToString());
    }
    Console.WriteLine(temp.ToString());
    }
    }
    }
      

  21.   

    to lbsong(萝卜头)第三道题用你的解法就太慢了,这道题完全有O(N)的解法
        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            Dim N As Integer = 500        For i As Integer = 1 To N / 2
                Dim x As Single = GetX(N, i)
                If x > 0 AndAlso x = Int(x) Then
                    MsgBox("Start with " & x & ", Number: " & i)
                End If
            Next
        End Sub    Private Function GetX(ByVal N As Integer, ByVal i As Integer) As Single
            Return (N - (i * i + i) / 2) / (i + 1)
        End Function写起来又短速多又快很多
      

  22.   

    第三题思路:
    从X开始,连续i + 1个数的和等于N(=500),那么
    X + (X+1) + (X+2) + ... + (X+i) = N

    (i+1)X + (i*i + i)/2 = N
    X = (N - (i*i + i)/2)/(i+1)i从1到N/2搜索,当发现满足上式的X正整数解,就发现了原问题的一个解
      

  23.   

    有个问题请教楼上的星星
    -------------------------------------
    100的阶乘等于93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000用4个double也算不出来,不用高精度算法没戏。
    -------------------------------------100的阶乘好像最多也就是10的150多次方吧?double可以存储10的300多次方,为什么double会溢出,请指教~~~~~
      

  24.   

    double的有效位数只有15位,308次方那是指数部分,即数量级,让你求100!具体的数,不是求100!的数量级。
      

  25.   

    100!是9.3326215443944152681699238856267e+157我用double得出的结果
    不知道对不对???????