#include<string.h>
void chengfa(char *a,char*b)
{
char c[10000]
int fuhao1,fuhao2
if(a[0] == '-' || a[0] == '+') {
if(a[0] == '-')
fuhao1 = -1
else fuhao1 = 1
strcpy(c,a+1)
strcpy(a,c)
}
if(b[0] == '-' || b[0] == '+') {
if(b[0] == '-')
fuhao2 = -1
else fuhao2 = 1
strcpy(c,b+1)
strcpy(b,c)
}
int i , j
for(i = 0i<10000i++){
c[i] = '0'
}
int lena = strlen(a)
int lenb = strlen(b)
for(i = lena-1i >=0i--){
int k = 0
for(j = lenb-1j >=0j--) {
char l = c[i+j+1]
c[i+j+1] = (c[i+j+1]-'0'+(b[j]-'0')*(a[i]-'0')+k)%10+'0'
k = (l-'0'+(b[j]-'0') * (a[i] -'0')+k)/10
}
if(k!= 0) c[i] += k
}
i = 0
j = 0
while(c[i] == '0') i++
while(i <= lena+lenb-1) {
a[j] = c[i]
j ++
i ++
}
a[j] = '\0'
if(a[0] == '\0') a[0] = '0',a[1] = '\0'
if(fuhao1*fuhao2 == -1 &&a[0] !='0') {
strcpy(c,a)
a[0] = '-'
a[1] = '\0'
strcat(a,c)
}
}
int main()
{
char a[10000],b[10000]
while(scanf("%s %s",a,b) == 2) {
chengfa(a,b)
printf("%s\n",a)
}
}
/*
//测试数据
3 4
12
1782362317836127863178 5
8911811589180639315890
2364782367834627864826 23478962483263478
55522636495472201715228381403526624828
*/
你的算法太难读了。估计效率也不怎么样。
晚上我直接给你贴一段以前我写的代码吧。
可惜了,我记错了,我的是大数阶乘的实现,和大数乘法略不同,仅供参考吧。
#include <iostream>#include <time.h>
using namespace std
#define VAR 255000 //数组空间
void main()
{
printf(
"\n\n本程序可计算任意整数的阶乘,只要你的CPU和RAM足够强悍\n"
"\t如果想将中间计算过程输出到文本文件,可以按以下方法操作\n\n"
"\t在命令提示符下\n"
"\t-----本程序名 >>路径\\文本名.txt\n\n"
"\t-----y 回车\n\n"
"\t-----整数 回车\n\n"
"\t-----即可在文本中看到计算过程\n\n"
"\tCopyright H.M.Z 2005-11-16\n\n")
//-----------------------变量及初始化-------------------------
NEXT_COUNT:
unsigned long x[VAR+1]={0}, //存放运算结果
blk=1,mblk,
cx=0, //cx进位
n, //目的数
temp, //运算过程的临时变量
e //初始运算7的阶乘
x[VAR]=1 //6的阶乘为720
clock_t start=0,end=0,tmp
//unsigned long add=0,mul=0,div=0,yu=0,xia=0 //各种运算次数
printf("\n__________________________________\n")
printf("请输入要计算的n=")
scanf("%lu",&n)
start = clock()
printf("当前计算:")
//-----------------------运算核心-----------------------------
for(blk=1,e=1e<n+1e++){
printf("%6lu的阶乘\b\b\b\b\b\b",e)
for( mblk=1, cx=0 mblk<blk+2 ){
temp=x[VAR+1-mblk]
if(temp+cx==0){
mblk++
continue
} //如果当前块+前次进位=0本块跳过不计算
x[VAR+1-mblk]=( temp * e )% 1000000 +cx
cx=( temp * e )/ 1000000
mblk++
}
if(x[VAR-blk]>0)
blk++
}
//-----------------------输出最后结果-------------------------
printf("\n\n%d的阶乘>>\t",n)
printf("%lu",x[VAR+1-blk--])
for(blk>0blk--)
printf(",%06lu",x[VAR+1-blk])
end = clock()
tmp=end-start
cout<< "\n本次计算花费时间 "<<tmp/60000<<" 分 "
<<tmp/1000-tmp/60000<<" 秒 "
<<tmp%1000<<" 毫秒 "<<endl
printf("\n__________________________________\n")
//-----------------------继续计算-----------------------------
char cho
printf("\n继续计算吗?[Y/N]")
cin>>cho
if(cho=='y'||cho=='Y'){
goto NEXT_COUNT
}
}