c语言哪里没考虑到 高精度乘法
#include<stdio.h>#include<string.h>intmain(){intd,i,j,m,n,a,b,k,z[20000],x[20000],c[4...
# include<stdio.h>
# include<string.h>
int main()
{
int d,i,j,m,n,a,b,k,z[20000],x[20000],c[40000];
char q[20000],w[20000];
scanf("%s %s",&q,&w);
a=strlen(q);
b=strlen(w);
for (i=0;i<40000;i++) c[i]=0;
if (a>b)
{for (i=0;i<a;i++) z[i]=q[a-1-i]-'0';
for (i=0;i<b;i++) x[i]=w[b-1-i]-'0';
m=b;n=a;
}
else
{for (i=0;i<a;i++) x[i]=q[a-1-i]-'0';
for (i=0;i<b;i++) z[i]=w[b-1-i]-'0';
m=a;n=b;
}
for (i=0;i<m;i++)
for (j=0;j<n;j++)
c[i+j]=c[i+j]+z[j]*x[i];
d=n+m;
for (i=0;i<d;i++)
while(c[i]>=10)
{c[i]=c[i]-10;
c[i+1]=c[i+1]+1;
}
for (i=39999;i>=0;i--)
if (c[i]!=0){k=i;break;}
for (i=k;i>=0;i--)
printf("%d",c[i]);
if (((n==1)&&(z[0]==0))||((m==1)&&(x[0]==0))) printf("0");
return 0;
} 展开
# include<string.h>
int main()
{
int d,i,j,m,n,a,b,k,z[20000],x[20000],c[40000];
char q[20000],w[20000];
scanf("%s %s",&q,&w);
a=strlen(q);
b=strlen(w);
for (i=0;i<40000;i++) c[i]=0;
if (a>b)
{for (i=0;i<a;i++) z[i]=q[a-1-i]-'0';
for (i=0;i<b;i++) x[i]=w[b-1-i]-'0';
m=b;n=a;
}
else
{for (i=0;i<a;i++) x[i]=q[a-1-i]-'0';
for (i=0;i<b;i++) z[i]=w[b-1-i]-'0';
m=a;n=b;
}
for (i=0;i<m;i++)
for (j=0;j<n;j++)
c[i+j]=c[i+j]+z[j]*x[i];
d=n+m;
for (i=0;i<d;i++)
while(c[i]>=10)
{c[i]=c[i]-10;
c[i+1]=c[i+1]+1;
}
for (i=39999;i>=0;i--)
if (c[i]!=0){k=i;break;}
for (i=k;i>=0;i--)
printf("%d",c[i]);
if (((n==1)&&(z[0]==0))||((m==1)&&(x[0]==0))) printf("0");
return 0;
} 展开
2个回答
推荐于2016-10-01
展开全部
#include<stdio.h>
# include<stdio.h>
# include<string.h>
int main()
{
int d, i, j, m, n, a, b, k, z[20000], x[20000], c[40000];
int temp;
char q[20000], w[20000];
scanf("%s %s", &q, &w);
a = strlen(q);
b = strlen(w);
for (i = 0; i<40000; i++) c[i] = 0;
if (a>b)
{
for (i = 0; i<a; i++) z[i] = q[a - 1 - i] - '0';
for (i = 0; i<b; i++) x[i] = w[b - 1 - i] - '0';
m = b; n = a;
}
else
{
for (i = 0; i<a; i++) x[i] = q[a - 1 - i] - '0';
for (i = 0; i<b; i++) z[i] = w[b - 1 - i] - '0';
m = a; n = b;
}
//z 大
//X 小
/*相乘*/
for (i=0;i <= m-1; i++)
for (j=0;j <= n-1; j++)
c[i + j] = c[i + j] + z[j] * x[i];
d = n + m;
for (i = 0; i <= d - 1; i++){
j = i;
while (c[j] >= 10)/*进位*/
{
temp = c[j] / 10;
c[j] = c[j] % 10;
c[j + 1] = c[j+1] + temp;
j++;
}
}
for (i = d; i >= 0; i--)
if (c[i] != 0){ k = i; break; }
for (i = k; i >= 0; i--)
printf("%d", c[i]);
/*if (((n == 1) && (z[0] == 0)) || ((m == 1) && (x[0] == 0))) printf("0");*/
return 0;
}
追问
为什么啊 - -! 我纠结好久 最后一句不是要判断 某一个为0的情况。
Sievers分析仪
2024-10-13 广告
2024-10-13 广告
是的。传统上,对于符合要求的内毒素检测,最终用户必须从标准内毒素库存瓶中构建至少一式两份三点标准曲线;必须有重复的阴性控制;每个样品和PPC必须一式两份。有了Sievers Eclipse内毒素检测仪,这些步骤可以通过使用预嵌入的内毒素标准...
点击进入详情页
本回答由Sievers分析仪提供
2014-11-22
展开全部
变量的类型。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询