c++ 高精度加法 压位 求纠正

用c++语言高精度加法,并且压位相加,我不知道哪里出问题了,输出来的答案很诡异……#include<cstdio>#include<cstring>constintdee... 用c++语言高精度加法,并且压位相加,我不知道哪里出问题了,输出来的答案很诡异……
#include<cstdio>
#include<cstring>
const int deep=100000;
int X[5]={1,10,100,1000,10000};
char a[100000],b[100000];
int t_a[100000],t_b[100000],ans[100000];
int lena,lenb,len,la,lb,l;
void ADD(void)
{
memset(ans,0,sizeof(ans));
if(la>lb) l=la;
else l=lb;
for(int i=i;i<=l;i++)
{
ans[i]=ans[i]+t_a[i]+t_b[i];
ans[i+1]=ans[i]/deep;
ans[i]=ans[i]%deep
while(ans[l+1]>0)
{
l=l+1;
ans[l+1]=ans[l]/deep;
ans[l]=ans[l]%deep;
}
}
}
int main()
{
memset(t_a,0,sizeof(t_a));
memset(t_b,0,sizeof(t_b));
scanf("%s",&a);
lena=strlen(a);
la=1;
int tmp=0;
for(int i=lena-1;i>=0;i--)
{
t_a[la]=t_a[la]+X[tmp]*(a[i]-'0');
tmp++;
if(tmp==5)
{
la++;
tmp=0;
}
}
scanf("%s",&b);
lenb=strlen(b);
lb=1;
int tnp=0;
for(int i=lena-1;i>=0;i--)
{
t_b[lb]=t_b[la]+X[tnp]*(b[i]-'0');
tnp++;
if(tnp==5)
{
lb++;
tnp=0;
}
}
ADD();
for(int i=l;i>=1;i--)
printf("%d",ans);
printf("\n");
return 0;
}
求高手来纠正
展开
 我来答
琶洲小混混
2011-07-08 · TA获得超过128个赞
知道答主
回答量:53
采纳率:0%
帮助的人:32.4万
展开全部
void ADD(void)
{
memset(ans,0,sizeof(ans));
if(la>lb) l=la;
else l=lb;
for(int i=i;i<=l;i++)
仔细看 你写的i=i i是一个不知道是什么的数 这程序我大概看了下,应该是对的,把他改成i=0应该就好了
追问
一看才发现自己又把“1”打成“i”了,捂脸……我再试试
改了,还是很诡异的答案,输入45和12,输出5210704
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
memberwin
推荐于2016-05-08 · TA获得超过3903个赞
知道大有可为答主
回答量:1000
采纳率:100%
帮助的人:509万
展开全部
不知道啥叫压位 高精度加法
代码中有一些错误,如楼上指出的i=i的错误
add函数中for循环里少";":
for(int i=i;i<=l;i++)
{
ans[i]=ans[i]+t_a[i]+t_b[i];
ans[i+1]=ans[i]/deep;
ans[i]=ans[i]%deep //这儿缺少;
最后输出时输出ans首地址的错误:
for(int i=l;i>=1;i--)
printf("%d",ans); //应该是ans[i]吧?
另外感觉逻辑上也有错,直接就没太看明白
以下代码可以正确编译运行,可以计算99999位以内的正整数的加法,但无法处理负数和小数
#include<cstdio>
#include<cstring>
const int deep=100000;
int X[5]={1,10,100,1000,10000};
char a[100000],b[100000];
int t_a[100000],t_b[100000],ans[100000];
int lena,lenb,len,la,lb,l;
void ADD(void)
{
memset(ans,0,sizeof(ans));
int stepUp = 0;
if(la>lb) l=la;
else l=lb;
int i;
for(i=0; i<la && i<lb; i++)
{
int tmp = t_a[i]+t_b[i] +stepUp;
stepUp = 0;
if(tmp>=10)
stepUp = 1;
ans[i] = tmp%10;
}
if(i == la)
{
for(; i<lb; i++)
{
int tmp = t_b[i] +stepUp;
stepUp = 0;
if(tmp>=10)
stepUp = 1;
ans[i] = tmp%10;
}
if(stepUp)
{
ans[i] = 1;
l += 1;
}
}
else if(i == lb)
{
for(; i<la; i++)
{
int tmp = t_a[i] +stepUp;
stepUp = 0;
if(tmp>=10)
stepUp = 1;
ans[i] = tmp%10;
}
if(stepUp)
{
ans[i] = 1;
l += 1;
}
}
}
int main()
{
memset(t_a,0,sizeof(t_a));
memset(t_b,0,sizeof(t_b));
scanf("%s",a);
lena=strlen(a);
la=0;
for(int i=lena-1; i>=0; i--)
{
t_a[la++]= a[i]-'0';
}
scanf("%s",b);
lenb=strlen(b);
lb=0;
for(int i=lenb-1; i>=0; i--)
{
t_b[lb++]=b[i]-'0';
}

ADD();

for(int i=l-1;i>=0;i--)
printf("%d",ans[i]);
printf("\n");
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式