当前位置: 代码迷 >> C语言 >> [转帖]▲▲▲▲面试题与大家共享▲▲▲▲
  详细解决方案

[转帖]▲▲▲▲面试题与大家共享▲▲▲▲

热度:138   发布时间:2005-01-11 22:45:00.0
[转帖]▲▲▲▲面试题与大家共享▲▲▲▲

编程题: 1、写一个程序,把一个100以内的自然数分解因数。(自然数分解因数就是将一

个自然数分解为几个素数的乘积,提示,由于该数不是很大,所以可以将质数保存在数组中,以加快计算速度) 2、编写一个Identify的分配、释放的函数,为1-10000之间的自然数。 from csdn check it out http://community.csdn.net/Expert/topic/3711/3711810.xml?temp=.2223017

搜索更多相关的解决方案: 转帖  面试  

----------------解决方案--------------------------------------------------------
第一个题做过
第二个题中的Identify分配是什么意思?
----------------解决方案--------------------------------------------------------
分配质数,释放一系列分解的因数
Identify()可以被认为是isPrime()的宏泛化
----------------解决方案--------------------------------------------------------
第一题,有点乱,没运行,不知道对不对?

#include<stdio.h>
main()
{int n,a[20],i,l=0,j,k,flag1=0,flag2=0,m;
printf("input a number(<100):");
scanf("%d",&n);m=n;
while(2)
{ for(k=2;k<n;k++)
   {j=n/k;
     flag1=0;
     for(i=2;i<j;i++)
     if (j%i==0) break;
     if (i>=j) flag1=1;
    if(flag1==1) {a[l++]=j;break;}
    }
   n=n/k;
   flag2=0;
  for(i=2;i<n;i++)
if (n%i==0) break;
if (i>=n) {a[l++]=n;break;}
}
printf("%d=",m);
for(i=0;i<l;i++)
{printf("%d",a[i]);
  if (i!=l-1) printf("*");
}
printf("\n");
getch();
}


运行了一下,不对,没时间改,下次有时间两来改!

[此贴子已经被作者于2005-1-13 21:27:00编辑过]



----------------解决方案--------------------------------------------------------
改了一部分:
#include<stdio.h>
main()
{int n,a[20],i,l=0,j,k,flag1=0,flag2=0,m;
printf("input a number(<100):");
scanf("%d",&n);    m=n;
while(2)
{ for(k=2;k<n;k++)
   {if(n%k==0)
     for(i=2;i<k;i++)
     if (k%i==0) break;
     if (i>=k) flag1=1;
    if(flag1==1) {a[l++]=k;break;}
    }
   n=n/k;
   flag2=0;
  for(i=2;i<n;i++)
if (n%i==0) break;
if (i>=n) {a[l++]=n;break;}
}
printf("%d=",m);
for(i=0;i<l;i++)
{printf("%d",a[i]);
  if (i!=l-1) printf("*");
}
printf("\n");
getch();
}
----------------解决方案--------------------------------------------------------

这样可以了: #include<stdio.h> main() {int n,a[20],i,l=0,j,k,flag1=0,flag2=0,m; printf("input a number(<100):"); scanf("%d",&n); m=n; while(2) { for(k=2;k<n;k++) { flag1=0;flag2=0; if(n%k!=0) continue;

for(i=2;i<k;i++) if (k%i==0) break; if (i>=k) flag1=1; if(flag1==1) {a[l++]=k;flag2=1;break;} } if(flag2) n=n/k;

for(i=2;i<n;i++) if (n%i==0) break; if (i>=n) {a[l++]=n;break;}

} printf("%d=",m); for(i=0;i<l;i++) {printf("%d",a[i]); if (i!=l-1) printf("*"); } printf("\n"); getch(); }


----------------解决方案--------------------------------------------------------
看了一下csdn中的那个贴,实在是小屋见大屋!

第二题还是不懂要干什么?


----------------解决方案--------------------------------------------------------
what
----------------解决方案--------------------------------------------------------
  相关解决方案