天!已经AC的题中竟然发现了致命错误

本文介绍了一个高精度浮点数加法函数中忽略最高位进位的问题,并提供了修正后的代码实现。通过对比错误代码与正确做法,强调了在处理大数运算时必须考虑所有可能的进位情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   POJ 1001 高精度浮点数幂中有个加法函数,现在发现竟然没有考虑最高位进位,我是在做了1503高精度加法后才发现的。

   上错误代码:

#include<iostream> #include<string> using namespace std; string Add(string a,string b) { char c; int i=a.length()-1, j=b.length()-1; string addResult; int remaining=0;//余数 int carry=0;//进位 for(; i>=0 && j>=0; i--,j--) { remaining=((a[i]-'0')+(b[j]-'0')+carry)%10; carry=((a[i]-'0')+(b[j]-'0')+carry)/10; c=(char)(remaining+'10'); addResult.insert((string::size_type)0,1,c);//注意用insert()插入单个字符的用法 } while(j>=0)//b比a长 { remaining=((b[j]-'0')+carry)%10; carry=((b[j]-'0')+carry)/10; c=(char)(remaining+'10'); addResult.insert((string::size_type)0,1,c); j--; } while(i>=0)//b比a长 { remaining=((a[i]-'0')+carry)%10; carry=((a[i]-'0')+carry)/10; c=(char)(remaining+'10'); addResult.insert((string::size_type)0,1,c); i--; } return addResult; } int main() { string a,b,sum; cout<<"9+9="<<Add("9","9")<<endl; cout<<"99+9="<<Add("99","9")<<endl; return 0; }

正确做法应在return前加上对可能的最高位进位的处理:

if(carry) { c=(char)(carry+'0'); addResult.insert((string::size_type)0,1,c); }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值