免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: x4ulocca
打印 上一主题 下一主题

金山软件招聘题目 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-10-05 14:28 |只看该作者

金山软件招聘题目

我写了个第二题的,不知道对不对(omg,忘了考虑负数)

  1. //mul.c
  2. #include <stdio.h>;
  3. #include <stdlib.h>;
  4. #include <ctype.h>;

  5. int A[256],B[256];
  6. int Alen,Blen;
  7. int M[256*2];

  8. void InputAB();
  9. void Print(int *Array, int len);
  10. void Mul(int *Array, int len, int n, int *Result, int zeros);
  11. void Add(int *total, int tlen, const int *add, int alen);
  12.        
  13. int main(int argc, char **argv){
  14.         int i;
  15.         int tmp[256*2];
  16.         InputAB();
  17.         Print(A,Alen);
  18.         putchar('*');
  19.         Print(B,Blen);
  20.        
  21.         puts("-----");
  22.        
  23.         for (i = Blen-1; i >;= 0; i--){
  24.                 Mul(A, Alen, B[i], tmp, Blen - 1 -i);
  25.                 Print(tmp, Alen + 1);
  26.                 Add(M, 256*2, tmp, Alen + Blen - i);
  27.         }
  28.        
  29.         puts("-----");
  30.        
  31.         Print(M, 256*2);
  32.         exit(0);
  33. }
  34. void InputAB(){
  35.         int c;
  36.        
  37.         while (!isdigit(c = getchar()));
  38.         A[0] = c - '0';
  39.         Alen=1;
  40.         while (isdigit(c = getchar()))
  41.                 A[Alen++] = c - '0';
  42.        
  43.         while (!isdigit(c = getchar()));
  44.         B[0] = c - '0';
  45.         Blen = 1;
  46.         while (isdigit(c = getchar()))
  47.                 B[Blen++] = c - '0';
  48. }
  49. void Print(int *Array, int len){
  50.         int i=0;
  51.         while ((i<len) && (Array[i] == 0) ) i++;
  52.         if (i == len){
  53.                 putchar('0');
  54.                 putchar('\n');
  55.                 return;
  56.         }
  57.         for ( ;i < len; i++)
  58.                 putchar(Array[i]+'0');
  59.         putchar('\n');
  60. }
  61. void Mul(int *Array, int len, int n, int *Result, int zeros){
  62.         int i;
  63.         for (i = len - 1; i >;= 0; i--)
  64.                 Result[i+1] = Array[i]*n;
  65.         Result[0] = 0;
  66.         for (i = len; i >; 0; i--){
  67.                 if (Result[i] >;= 10){
  68.                         Result[i-1] +=Result[i] / 10;
  69.                         Result[i] %= 10;
  70.                 }
  71.         }
  72.         for (i = 1; i <= zeros; i++)
  73.                 Result[len+i] = 0;
  74. }
  75. void Add(int *total, int tlen, const int *add, int alen){
  76.         int i,tmp = tlen;
  77.         while ((tlen >; 0) && (alen >; 0)){
  78.                 tlen--;
  79.                 alen--;
  80.                 total[tlen] += add[alen];
  81.         }
  82.         for (i = tmp - 1; i>;=0; i--){
  83.                 if (total[i] >;= 10){
  84.                         total[i - 1] += total[i] / 10;
  85.                         total[i] %= 10;
  86.                 }
  87.         }
  88. }
复制代码

论坛徽章:
0
12 [报告]
发表于 2005-10-05 20:24 |只看该作者

金山软件招聘题目

>;>;  什么是不大于256位的正整数
看不懂...

论坛徽章:
0
13 [报告]
发表于 2005-10-05 20:29 |只看该作者

金山软件招聘题目

大家都是牛人啊!

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
14 [报告]
发表于 2005-10-07 19:37 |只看该作者

金山软件招聘题目

和加密相关呀,求素数,大数运算,进制转换。要是考除法恐怕就更有意思了。

有关大数运算,一般也是通过进制来算的,这需要对进制非常理解。在32位机器上,可以通过short类型作为基数,2个short相乘,不会大于一个long,如果支持longlong,就可以用long作为基数。

论坛徽章:
0
15 [报告]
发表于 2005-10-08 10:38 |只看该作者

金山软件招聘题目

第1题
这题我的方法很笨.. 从5开始7 9 11 13..........直到小于等于N
是素数就输出 ..大家有什么很快很巧妙的方法说说看??

  1. #include<stdio.h>;
  2. #include<stdlib.h>;
  3. #include<iostream>;
  4. int main(int argc,char** argv)
  5. {
  6.     using namespace std;
  7.     cout<<"Please input a number n: ";
  8.     int n;
  9.     if(cin>;>;n)
  10.      {
  11.       cout<<"your input nuber is: "<<n<<endl;
  12.        if(n<=1)
  13.          {
  14.             cout<<"error n must larger than 1"<<endl;
  15.                return 1;
  16.          }
  17.          
  18.      }
  19.     else
  20.     {
  21.        cout<<"error please input a number"<<endl;
  22.          return 1;
  23.     }
  24.    cout<<"result :"<<endl;
  25.    if(n==2)
  26.     {
  27.        cout<<"1"<<endl;
  28.        return 0;
  29.     }
  30.    else if(n==3||n==4)
  31.     {
  32.        cout<<"1"<<endl;
  33.        cout<<"2"<<endl;
  34.        cout<<"3"<<endl;
  35.        return 0;
  36.     }
  37.    else
  38.     {
  39.         cout<<"1"<<endl;
  40.         cout<<"2"<<endl;
  41.         cout<<"3"<<endl;
  42.         for(int i=5;i<=n;i=i+2)
  43.           {
  44.           int flag=0;
  45.           for(int j=2;j<=i/2;j++)
  46.             {
  47.              if(i%j==0)
  48.                 {
  49.                flag=1;
  50.                break;
  51.                 }
  52.              }
  53.           if(flag==0)cout<<i<<endl;
  54.           else flag=0;
  55.           }
  56.     return 0;
  57.     }
  58.      
  59. }
复制代码
[/code]

论坛徽章:
0
16 [报告]
发表于 2005-10-08 10:38 |只看该作者

金山软件招聘题目

第2题
题目是输入正整数所以负数浮点数一律当错误输入

  1. #include<stdio.h>;
  2. #include<stdlib.h>;
  3. #include<iostream>;
  4. using namespace std;
  5. struct number{
  6.     int n[256];
  7.     int len;
  8. };
  9. void inputno(number &no);
  10. long multiply(number A,number B);
  11. int main(int argc,char **argv)
  12. {
  13.       number A,B;
  14.       printf("please input first number: ");
  15.       inputno(A);
  16.       printf("please input second number: ");
  17.       inputno(B);     
  18.       multiply(A,B);      
  19.       return 0;
  20. }
  21. void inputno(number &no)
  22. {
  23.      
  24.      char input[256];
  25.      cin>;>;input;
  26.      int i;   
  27.      for(i=0;input[i]!='\0';i++)
  28.       {
  29.        if(input[i]<'0'||input[i]>;'9')
  30.          {
  31.             cout<<"error please input number"<<endl;
  32.             exit(1);
  33.          }
  34.        no.n[i]=input[i]-'0';
  35.       }
  36.      no.len=i;   
  37. }

  38. long multiply(number A,number B)
  39. {
  40.     long sum[B.len];
  41.     long total=0;
  42.     for(int i=0;i<B.len;i++)
  43.          sum[i]=0;
  44.     for(int i=0;i<A.len;i++)
  45.           cout<<A.n[i];
  46.     cout<<endl<<"X ";
  47.     for(int i=0;i<B.len;i++)
  48.           cout<<B.n[i];
  49.     cout<<endl<<"-----------"<<endl;
  50.     int flag1=1,flag2;
  51.     for(int i=B.len-1;i>;=0;--i)
  52.     {
  53.          
  54.        if(i<B.len-1)
  55.        flag1*=10;
  56.        flag2=1;
  57.        for(int j=A.len-1;j>;=0;--j)
  58.         {
  59.            if(j<A.len-1)flag2*=10;
  60.            
  61.            sum[i]=sum[i]+B.n[i]*A.n[j]*flag2;
  62.          }
  63.        sum[i]*=flag1;
  64.        cout<<sum[i]/flag1<<endl;
  65.     }
  66.     cout<<"-----------"<<endl;
  67.    for(int i=0;i<B.len;i++)
  68.    {
  69.        total+=sum[i];
  70.     }
  71.    cout<<total<<endl;
  72. }
复制代码

论坛徽章:
0
17 [报告]
发表于 2005-10-08 10:49 |只看该作者

金山软件招聘题目

以前写过100位的除法,而且是一步一步演算的,不过程序早丢了。其实不太难,用个数组就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP