九度1137 java_九度OJ 1137 浮点数加法 | 学步园

北大的这道研究生上机真题初看起来很容易实现,先加小数部分,再加整数部分。但是没想到自己实现起来还是花了一个小时才AC掉,有些失望。更多的功夫还是花在了字符串的处理上,即使把小数和整数部分分离。

题目URL:http://ac.jobdu.com/problem.php?id=1137

我的AC代码。

#include

#include

#include

#include

using namespace std;

const int Max = 100;

int ia[Max], ib[Max], ta[Max], tb[Max], ic[Max], tc[Max];

char in[Max], t[Max];

int main()

{

int cases, l1, l2, l3, l4, l;

cin >> cases;

while(cases--)

{

memset(ic, 0, sizeof(ic)); memset(tc, 0, sizeof(tc));

memset(ia, 0, sizeof(ia)); memset(ta, 0, sizeof(ta));

memset(ib, 0, sizeof(ib)); memset(tb, 0, sizeof(tb));

scanf("%s", in);

l = strlen(in);

int i;

for(i=0; i

l1 = i++;

for(int j=0; j

{

int tem = ia[l1 - 1 - j];

ia[l1 - 1 - j] = ia[j];

ia[j] = tem;

}

for(; i

l2 = l - l1 - 1;

scanf("%s", in);

l = strlen(in);

for(i=0; i

l3 = i++;

for(int j=0; j

{

int tem = ib[l3 - 1 - j];

ib[l3 - 1 - j] = ib[j];

ib[j] = tem;

}

for(; i

l4 = l - l3 - 1;

l2 = max(l2, l4);

int c = 0, temp;

for(int i=l2-1; i>=0; i--)

{

temp = ta[i] + tb[i] + c;

tc[i] = temp % 10;

c = temp / 10;

}

int f;

for(f=l2-1; f>=0; f--)

if(tc[f]) break;

l1 = max(l1, l3);

for(int j=0; j<=l1; j++)

{

temp = ia[j] + ib[j] + c;

ic[j] = temp % 10;

c = temp / 10;

}

int k;

for(k=l1; k>=0; k--)

if(ic[k]) break;

if(k == -1) l1 = 0;

else l1 = k;

for(int j=l1; j>=0; j--) printf("%d", ic[j]);

if(f != -1)

{

printf(".");

for(int j=0; j<=f; j++) printf("%d", tc[j]);

}

printf("\n");

}

system("pause");

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值