c语言 高精度乘法总是超时………………

#include<stdio.h>longlongvd(longlonga[1251]){inti=0,j=0;charstr[10001]={'\0'};scanf("... #include <stdio.h>
long long vd(long long a[1251])
{
int i=0,j=0;
char str[10001]={'\0'};
scanf("%s",str);
while(str[i]!='\0')
{
i=i+1;
}
if(i%8==0)//////////////
{
for(j=0;j<i/8;j++)
{
a[j]=str[i-j*8-1]-48+(str[i-j*8-2]-48)*10+(str[i-j*8-3]-48)*100+(str[i-j*8-4]-48)*1000+(str[i-j*8-5]-48)*10000+(str[i-j*8-6]-48)*100000+(str[i-j*8-7]-48)*1000000+(str[i-j*8-8]-48)*10000000;
}
j=j-1;
}
else
{
for(j=0;j<i/8;j++)
{
a[j]=str[i-j*8-1]-48+(str[i-j*8-2]-48)*10+(str[i-j*8-3]-48)*100+(str[i-j*8-4]-48)*1000+(str[i-j*8-5]-48)*10000+(str[i-j*8-6]-48)*100000+(str[i-j*8-7]-48)*1000000+(str[i-j*8-8]-48)*10000000;
}
if(i%8==1)
{a[j]=(str[0]-48);}
if(i%8==2)
{a[j]=(str[0]-48)*10+(str[1]-48);}
if(i%8==3)
{a[j]=(str[0]-48)*100+(str[1]-48)*10+(str[2]-48);}
if(i%8==4)
{a[j]=(str[0]-48)*1000+(str[1]-48)*100+(str[2]-48)*10+(str[3]-48);}
if(i%8==5)
{a[j]=(str[0]-48)*10000+(str[1]-48)*1000+(str[2]-48)*100+(str[3]-48)*10+(str[4]-48);}
if(i%8==6)
{a[j]=(str[0]-48)*100000+(str[1]-48)*10000+(str[2]-48)*1000+(str[3]-48)*100+(str[4]-48)*10+(str[5]-48);}
if(i%8==7)
{a[j]=(str[0]-48)*1000000+(str[1]-48)*100000+(str[2]-48)*10000+(str[3]-48)*1000+(str[4]-48)*100+(str[5]-48)*10+(str[6]-48);}
}
return j;
}
int main()
{
long long a[1251]={0},a1,a2;
long long b[1251]={0},b1,b2;
long long c[2501]={0};
long long q;
a1=vd(a);
b1=vd(b);
for(a2=0;a2<=a1;a2++)
{
for(b2=0;b2<=b1;b2++)
{
c[a2+b2]=a[a2]*b[b2]+c[a2+b2];
if(c[a2+b2]>99999999)
{
c[a2+b2+1]=c[a2+b2]/100000000+c[a2+b2+1];
c[a2+b2]=c[a2+b2]%100000000;
if(c[a2+b2+1]>99999999)
{
c[a2+b2+2]=c[a2+b2+1]/100000000+c[a2+b2+2];
c[a2+b2+1]=c[a2+b2+1]%100000000;
}
}
}
}
for(q=a1+b1+1;q>=0;q--)
{
if(c[q]==0&&c[q-1]==0&&q-1>=0)
{printf("00000000");}
if(c[q]!=0)
{
printf("%lld",c[q]);
if(c[q-1]<10000000&&c[q-1]>999999&&q-1>=0)
{printf("0");q=q-1;}
if(c[q-1]<1000000&&c[q-1]>99999&&q-1>=0)
{printf("00");q=q-1;}
if(c[q-1]<100000&&c[q-1]>9999&&q-1>=0)
{printf("000");q=q-1;}
if(c[q-1]<10000&&c[q-1]>999&&q-1>=0)
{printf("0000");q=q-1;}
if(c[q-1]<1000&&c[q-1]>99&&q-1>=0)
{printf("00000");q=q-1;}
if(c[q-1]<100&&c[q-1]>9&&q-1>=0)
{printf("000000");q=q-1;}
if(c[q-1]<10&&c[q-1]>0&&q-1>=0)
{printf("0000000");q=q-1;}
if(c[q-1]==0&&q-1>=0)
{printf("00000000");q=q-1;}
}
}
printf("\n");
return 0;
}

抱歉实在没分了
展开
 我来答
s731537917
2012-03-18
知道答主
回答量:3
采纳率:0%
帮助的人:3.1万
展开全部
你在数组初始化时,赋给它'\0',其值在首地址中,但之后你又在首地址中赋了字符,之后又没有结束语句,导致得不出结果
追问
……程序没问题  超时了,输出的地方可以用开关语句优化吗…………
追答
可以
kolonse
2012-03-17 · 超过33用户采纳过TA的回答
知道答主
回答量:176
采纳率:0%
帮助的人:90.9万
展开全部
不是吧 这么长 还没分 不看了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小0坏0
2012-03-19 · 超过32用户采纳过TA的回答
知道答主
回答量:149
采纳率:72%
帮助的人:48.7万
展开全部
对不起哈 能力不够 看不懂你要表达的意思
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式