hdu 1753 长小数相加 为何不过????

Kunaly 2016-04-24 05:15:40
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define N 1010

char a[N],b[N];
int s1[N],s2[N],ans[N];
int index;

void Add()
{
int i,j,k,n,s,c;

memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
memset(ans,0,sizeof(ans));

n=strlen(a);
if(strchr(a,'.')==NULL)
{
k=n;
}
else
{
k=strchr(a,'.')-a; ///zhuyi !!
}

j=500;
for(i=k-1;i>=0;i--)
{
s1[j++]=a[i]-'0';
}
j=499;
for(i=k+1;a[i];i++)
{
s1[j--]=a[i]-'0';
}

n=strlen(b);
if(strchr(b,'.')==NULL)
{
k=n;
}
else
{
k=strchr(b,'.')-b;
}

j=500;
for(i=k-1;i>=0;i--)
{
s2[j++]=b[i]-'0';
}

j=499;
for(i=k+1;b[i];i++)
{
s2[j--]=b[i]-'0';
}

c=0;
for(i=0;i<1100;i++)
{
s=s1[i]+s2[i]+c;
ans[i]=s%10;
c=s/10;
}
}

void Output()
{
int i;
for(i=1099;i>=500;i--)
{
if(ans[i]!=0)
{
index=i;
break;
}
}

if(i==499)
printf("0");
else
{
for(i=index;i>=500;i--)
printf("%d",ans[i]);
}

for(i=0;i<=499;i++)
{
if(ans[i]!=0)
{
index=i;
break;
}
}
if(i!=500)
{
printf(".");
for(i=499;i>=index;i--)
printf("%d",ans[i]);
}

printf("\n");
}

int main()
{
while(scanf("%s %s",a,b)!=EOF)
{
Add();
Output();
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
}
return 0;
}










...全文
114 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhgwbzhd 2016-04-29
  • 打赏
  • 举报
回复
弄好就行,小数有时会有偏差。
Kunaly 2016-04-29
  • 打赏
  • 举报
回复
额额,已经搞定了

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧