日本住友ka 30:"编程计算1000!并输出" 的源程序

来源:百度文库 编辑:神马品牌网 时间:2024/05/02 09:44:09
输入N个数,然后按递增序输出的C语言的源程序

和"N(N<100)个人围成一圈,按顺序排号。从第一个人开始报数(从1到5报数),凡报到5的人退出圈子,问最后留下的是最初的第几号。用两种方法实现,一种是仅用数组实现,另一种用指向数组的指针实现"的源程序

多谢了

因为是由我自己写的,所以算法上可能不够最简,不过功能都实现了/
编程计算1000!并输出(本例实现输入数据的阶乘算法,可以实现结果是10000位数的阶乘.如还想增大范围,可以改M值):
#define M 10000
main()
{
int i,j,k,temp1,temp2,N;
int sign=0;
int a[M];
clrscr();
printf("please input a num:");
scanf("%d",&N);
for(i=1;i<M;i++)
a[i]=0;
a[0]=1;

for(k=1;k<=N;k++)
{
sign=0;
for(i=M;i>=0;i--)
{
if(a[i]>=1)

sign=1;

if(sign==1)
{

temp1=a[i]*k;
a[i]=temp1%10;
temp1=(temp1-a[i])/10;
for(j=1;temp1!=0;j++)
{
temp2=temp1+a[i+j];
a[j+i]=temp2%10;
temp1=temp2/10;
}
}
}
}
sign=0;
printf(" %d! = \n",N);
for(j=M;j>=0;j--)
{
if(a[j]>=1)sign=1;
if(sign==1)
printf("%d",a[j]);
}
printf("\n");
getch();
}
报数问题(本程序仅用数组形式实现,另指针由于时间我没写):

#define N 50 /*参加人数 */
#define M 5 /*报数大小*/
main()
{
int a[N],i,j=0,k,sum=0;
for(i=0;i<N;i++)
a[i]=1;
for(i=0;;i++)
{
if (i==N)
{
i=0;
sum=0;
for(k=0;k<N;k++)
sum+=a[k];
}
if(sum==1)break;

if(a[i]==1)
{
j+=1;
if(j%M==0)
a[i]=0;
}

}
for(i=0;i<N;i++)
if(a[i]==1)
printf("%d\n",i);
}
关于第二个排序网上很多,很多书上也有,就不写了.