重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
哥给你一个好的,用数组模拟乘法
图木舒克网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、自适应网站建设等网站项目制作,到程序开发,运营维护。创新互联于2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
俺原创的,呵呵~~~
#include stdio.h
void main()
{
int a[1000]={1},b[4]={0};
int k,i,j;
scanf("%d",k);
void multi(int a[],int b[]); // 用于计算乘法的函数,计算a*b 并把结果放在a当中
void seperate(int n, int b[]); //分离一个数的没一位,并放在b中!
for (i=1;i=k;i++)
{
seperate(i,b);
multi(a,b);
}
for (j=999;a[j]==0;j--);
//反序输出
for (i=j;i=0;i--) //
printf("%d",a[i]); //
} //主函数结束,下面是函数部分
void seperate(int n,int b[]) //注意最后一位是放在b[0]中的!
{
int i;
for (i=0;n0;i++)
{
b[i]=n%10;
n/=10;
}
}
void multi(int a[],int b[]) //核心程序,非常难调啊!!!!!
{
int tp[1000]={0};
int i,j,t,p,m,n;
for (m=3;b[m]==0;m--);
for (n=999;a[n]==0;n--);
for (j=0;j=m;j++)
{
t=0;
for ( i=0;in+2;i++)
{
p=b[j]*a[i]+t+tp[i+j];
tp[i+j]=p%10;
t=p/10;
}
}
for (j=999;tp[j]==0;j--);
for (i=0;i=j;i++)
a[i]=tp[i];
}
哥给你一个好的,用数组模拟乘法
俺原创的,呵呵~~~
#include stdio.h
void main()
{
int a[1000]={1},b[4]={0};
int k,i,j;
scanf("%d",k);
void multi(int a[],int b[]); // 用于计算乘法的函数,计算a*b 并把结果放在a当中
void seperate(int n, int b[]); //分离一个数的没一位,并放在b中!
for (i=1;i=k;i++)
{
seperate(i,b);
multi(a,b);
}
for (j=999;a[j]==0;j--);
//反序输出
for (i=j;i=0;i--) //
printf("%d",a[i]); //
} //主函数结束,下面是函数部分
void seperate(int n,int b[]) //注意最后一位是放在b[0]中的!
{
int i;
for (i=0;n0;i++)
{
b[i]=n%10;
n/=10;
}
}
void multi(int a[],int b[]) //核心程序,非常难调啊!!!!!
{
int tp[1000]={0};
int i,j,t,p,m,n;
for (m=3;b[m]==0;m--);
for (n=999;a[n]==0;n--);
for (j=0;j=m;j++)
{
t=0;
for ( i=0;in+2;i++)
{
p=b[j]*a[i]+t+tp[i+j];
tp[i+j]=p%10;
t=p/10;
}
}
for (j=999;tp[j]==0;j--);
for (i=0;i=j;i++)
a[i]=tp[i];
}
你的程序有些问题 我改了一下 你看看
#includestdio.h#includestring.h
//将数转为数组
int f(int n,int a[]){
int i=0;
while(n!=0){
a[i++]=n%10;
n=n/10;
}
return i;
}
//求数组长度
int qiu(int a[]){
int i;
for(i=2003;i=0;i--) {
if(a[i]!=0) {
return i+1;
break;
}
}
return 0;
}
//将数组a 赋值到数组b 并清零数组a
void fuzhi(int a[],int b[]){
int a1,b1,i;
a1=qiu(a);
b1=qiu(b);
for(i=0;ib1;i++){
b[i]=0;
}
for(i=0;ia1;i++){
b[i]=a[i];
}
for(i=0;ia1;i++){
a[i]=0;
}
}
//求n的阶乘
int fun(int n){
int i=0,k;
int a[2004]={0},b[2004]={0} ,c[2004]={0};
if(n==0||n==1){
printf("n=%d的阶乘为:1\n",n);
}
else
{
f(1,a);
f(2,b);
fac(a,b,c);
for(i=3;i=n;i++){
fuzhi(c,a);
f(i,b);
fac(a,b,c);
}
k=qiu(c);
printf("计算结果:\n");
for(i=k-1;i=0;i--) {
printf("%d",c[i]);
}
printf("\n");
}
return 0;
}
//本函数是求两个数之积的高精度乘法,并输出两个数之积为数组c
int fac(int a[],int b[],int c[])
{
int i,j,m=0,n=0,k=0;
m=qiu(a);
n=qiu(b);
for(j=0;jn;j++){
for(i=0;im;i++) {
c[i+j]=c[i+j]+a[i]*b[j];
while(c[i+j]=10)
{
c[i+j]=c[i+j]-10;
c[i+j+1]=c[i+j+1]+1;
}
}
}
return 0;
}
void main(){
int n;
printf("请输入N的值:\n");
scanf("%d",n);
fun(n);
return 0;
}
可以运行 结果也没有问题 如果有不懂的 可以加我QQ 354156421
你的函数原型是这个int jiecheng(int a);调用的却是 s=jiecheng(); 没有传参进去,所以报错,应该改为:
int s;
int result;
scanf("%d",s);
result=jiecheng(s);
另外,还要做一个特殊处理,比如:当参数为零时,输出为1;当参数为-1时,输出0;当为负数时,提示不正确