求大神帮忙解释一下下面这段c语言程序!
下面这段是大整数求阶乘的程序,求大神解释一下原理,附数值解释一下,最好详细点~谢过各位大神了#include<stdio.h>#include<string.h>void...
下面这段是大整数求阶乘的程序,求大神解释一下原理,附数值解释一下,最好详细点~谢过各位大神了
#include <stdio.h>
#include <string.h>
void main()
{
void mult(char s[],int n);
void add(char s1[], char s2[]);
int time ,j;
printf("请输入要执行的次数:");
scanf("%d",&time);
for(j=0;j<time;j++)
{
int n, jinwei=0, shi, ge, num,i;
printf("请输入1--150之内的整数!");
scanf("%d",&n);
if(n>0&&n<=58){
char b[1000];
char a[1000];
a[0]='1';
for(i=1;i<=999;i++)
a[i]=0;
for(i=1;i<=n;i++)
{
strcpy(b,a);
num=strlen(a);
shi = i%100/10;
ge = i%10;
mult(a, ge);
if(shi)
{
mult(b, shi);
num=strlen(b);
b[num]=48;
b[num+1]=0;
add(a, b);
}
}
if(shi>0)
{
printf("%d%d!=",shi,ge);
puts(a);
}
else
{
printf("%d!=",ge);
puts(a);
}
}
else printf("错误");
}
}
void add(char s1[], char s2[])
{
int i, m, n, k, jinwei=0;
m=strlen(s1);
n=strlen(s2);
if(m>=n)
{
for(i=n; i>=0; i--)
s2[i+m-n]=s2[i];
for(i=0; i<m-n; i++)
s2[i]=48;
}
else
{
for(i=m; i>=0; i--)
s1[i+n-m]=s1[i];
for(i=0; i<n-m; i++)
s1[i]=48;
}
for(i=m-1; i>=0; i--)
{
k=s1[i]+s2[i]+jinwei-96;
s1[i]=k%10+48;
jinwei=k/10;
}
if(jinwei)
{
for(i=m; i>=1; i--)
s1[i]=s1[i-1];
s1[0]=49;
s1[m+1]=0;
}
}
void mult(char s[], int x)
{
int i, m, n, jinwei=0;
n=strlen(s);
for(i=n-1; i>=0; i--)
{
m=(s[i]-48)*x+jinwei;
s[i]=m%10+48;
jinwei=m/10;
}
if(jinwei)
{
{
for(i=n; i>=1; i--)
s[i]=s[i-1];
s[0]=jinwei+48;
}
s[n+1]=0;
}
} 展开
#include <stdio.h>
#include <string.h>
void main()
{
void mult(char s[],int n);
void add(char s1[], char s2[]);
int time ,j;
printf("请输入要执行的次数:");
scanf("%d",&time);
for(j=0;j<time;j++)
{
int n, jinwei=0, shi, ge, num,i;
printf("请输入1--150之内的整数!");
scanf("%d",&n);
if(n>0&&n<=58){
char b[1000];
char a[1000];
a[0]='1';
for(i=1;i<=999;i++)
a[i]=0;
for(i=1;i<=n;i++)
{
strcpy(b,a);
num=strlen(a);
shi = i%100/10;
ge = i%10;
mult(a, ge);
if(shi)
{
mult(b, shi);
num=strlen(b);
b[num]=48;
b[num+1]=0;
add(a, b);
}
}
if(shi>0)
{
printf("%d%d!=",shi,ge);
puts(a);
}
else
{
printf("%d!=",ge);
puts(a);
}
}
else printf("错误");
}
}
void add(char s1[], char s2[])
{
int i, m, n, k, jinwei=0;
m=strlen(s1);
n=strlen(s2);
if(m>=n)
{
for(i=n; i>=0; i--)
s2[i+m-n]=s2[i];
for(i=0; i<m-n; i++)
s2[i]=48;
}
else
{
for(i=m; i>=0; i--)
s1[i+n-m]=s1[i];
for(i=0; i<n-m; i++)
s1[i]=48;
}
for(i=m-1; i>=0; i--)
{
k=s1[i]+s2[i]+jinwei-96;
s1[i]=k%10+48;
jinwei=k/10;
}
if(jinwei)
{
for(i=m; i>=1; i--)
s1[i]=s1[i-1];
s1[0]=49;
s1[m+1]=0;
}
}
void mult(char s[], int x)
{
int i, m, n, jinwei=0;
n=strlen(s);
for(i=n-1; i>=0; i--)
{
m=(s[i]-48)*x+jinwei;
s[i]=m%10+48;
jinwei=m/10;
}
if(jinwei)
{
{
for(i=n; i>=1; i--)
s[i]=s[i-1];
s[0]=jinwei+48;
}
s[n+1]=0;
}
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询