您的位置:首页 > 其它

大数相乘模板

2017-07-24 15:55 246 查看
 自己以前的写的一个两个大数数相乘

#include<stdio.h>
#include<string.h>
using namespace std;
#define N 2000
char z
,a[1000],b[1000],c
;
int l1,l2;
void jf()
{
int i;
for(i=N-1; i>=0; i--)
{
if(c[i]+z[i]-96>9)
{
z[i-1]=z[i-1]+1;
z[i]=z[i]+c[i]-48-10;
}
else z[i]=c[i]+z[i]-48;
}
return ;
}
void  cf(int g,char A)
{
int i,j,cs,k;
for(i=l1-1; i>=0; i--)
{
memset(c,'0',sizeof(c));
cs=(a[i]-'0')*(A-'0');
for(j=l1-1-i+g,k=N-1; j>0; j--,k--)
c[k]='0';
while(cs!=0)
{
c[k]=cs%10+48;
cs=cs/10;
k--;
}
jf();
}
return ;

}

int main()
{
int i,k;
while(gets(a))
{  gets(b);
memset(z,'0',sizeof(z));
l1=strlen(a);
l2=strlen(b);
for(i=l2-1; i>=0; i--)
cf(l2-1-i,b[i]);
for(k=0; k<=N-1; k++)
if(z[k]!='0') break;
if(k==N) printf("0");
else  for(; k<=N-1; k++)
printf("%c",z[k]);
printf("\n\n");
}
return 0;
}


下面的这个是大数的阶乘

#include<bits/stdc++.h>
using namespace std;
#define N 1000
char z
,a[1000],b[1000],c
;
int l1,l2;

int fz()
{
int k=0;
for(int i=0; i<=N-1; i++)
{
if(z[i]==0) continue;
else   a[k++]=z[i];
}
return k;
}

void jf()
{
int i;
for(i=N-1; i>=0; i--)
{
if(c[i]+z[i]-96>9)
{
z[i-1]=z[i-1]+1;
z[i]=z[i]+c[i]-48-10;
}
else z[i]=c[i]+z[i]-48;
}
return ;
}

void  cf(int g,char A)
{
int i,j,cs,k;
for(i=l1-1; i>=0; i--)
{
memset(c,'0',sizeof(c));
cs=(a[i]-'0')*(A-'0');
for(j=l1-1-i+g,k=N-1; j>0; j--,k--)
c[k]='0';
while(cs!=0)
{
c[k]=cs%10+48;
cs=cs/10;
k--;
}
jf();
}
return ;
}

void cfsc()
{
int k;
for(k=0; k<=N-1; k++)
if(z[k]!='0') break;
if(k==N) printf("0");
else  for(; k<=N-1; k++)
printf("%c",z[k]);
printf("\n");

}

int main()
{
int i,k;
int n,t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
memset(z,'0',sizeof(z));
z[N-1]='1';
for(int dt=1; dt<=n; dt++)
{
l1=fz();
itoa(dt,b,10);
memset(z,'0',sizeof(z));
l2=strlen(b);
for(i=l2-1; i>=0; i--)
cf(l2-1-i,b[i]);
}
cfsc();
}
return 0;
}


原创请标明出处 http://blog.csdn.net/xky140610205?viewmode=contents
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: