大数加法
来源:互联网 发布:淘宝代运营被骗案判例 编辑:程序博客网 时间:2024/04/29 12:31
string BigNum :: BigAdd(string s1, string s2)
{
int b, f, i, j, t, t1, t2, l, l1, l2;
char ct;
string s11, s12, s21, s22, st1, st2;
//cin>>s1;
//cin>>s2;
l1 = s1.size();
l2 = s2.size();
for(i=0, f=0, b=0; i<l1; ++i)
{
if(b==0)
{
if(s1[i]=='0'&&i<l1&&s1[i+1]!='.')// 被加数整数部分除前0--保留小数点前一个0
{
continue;
}
else
{
b = 1;
}
}
if(s1[i]=='.')
{
f = 1;
continue;
}
if(f==0)// 整数部分
{
s11 += s1[i];
}
else// 小数部分
{
s12 += s1[i];
}
}
for(i=0, f=0, b=0; i<l2; ++i)
{
if(b==0)
{
if(s2[i]=='0'&&i<l2&&s2[i+1]!='.')// 加数整数部分除前0--保留小数点前一个0
{
continue;
}
else
{
b = 1;
}
}
if(s2[i]=='.')
{
f = 1;
continue;
}
if(f==0)// 整数部分
{
s21 += s2[i];
}
else// 小数部分
{
s22 += s2[i];
}
}
s1.erase(0, l1);
s2.erase(0, l2);
l1 = s12.size()-1;
l2 = s22.size()-1;
f = 0;
b = 0;
while(l1>=0)// 小数部分加法--由最低位向上加
{
if(l1>l2)// 被加数小数部分长度大--直接加(除小数末尾0)
{
if(b==1)
{
st2 += s12[l1];
}
else
{
if(s12[l1]!='0')// 除末尾0
{
st2 += s12[l1];
b = 1;
}
}
--l1;
continue;
}
else if(l1<l2)// 加数小数部分长度大--直接加(除小数末尾0)
{
if(b==1)
{
st2 += s22[l2];
}
else
{
if(s22[l2]!='0')// 除小数末尾0
{
st2 += s22[l2];
b = 1;
}
}
--l2;
continue;
}
else
{
t1 = s12[l1] - '0';// 字符型数字转换为整型数字
t2 = s22[l2] - '0';// 字符型数字转换为整型数字
--l1;
--l2;
t = t1 + t2 + f;// 两数相加(包括进位符)
f = 0;
if(t>9)// 数和大于9--进位
{
f = 1;
t = t % 10;
}
itoa(t, &ct, 10);// 整型数字转换为字符型数字
st2 += ct;
}
}
for(i=s11.size()-1, j=s21.size()-1; i>=0||j>=0; --i, --j)// 整数部分加法
{
if(i>=0)// 被加数整数部分还有数
{
t1 = s11[i] - '0';// 字符型数字转换为整型数字
}
else// 被加数整数部分没有数则补0
{
t1 = 0;
}
if(j>=0)// 加数整数部分还有数
{
t2 = s21[j] - '0';// 字符型数字转换为整型数字
}
else// 加数整数部分没有数则补0
{
t2 = 0;
}
t = t1 + t2 + f;// 两数相加(包括进位符)
f = 0;
if(t>9)// 数和大于9--进位
{
f = 1;
t = t % 10;
}
itoa(t, &ct, 10);// 整型数字转换为字符型数字
st1 += ct;
}
if(f==1)
{
itoa(f, &ct, 10);
st1 += ct;
}
l = st1.size();
for(i=l-1; i>=0; --i)// 整数部分和入s1
{
s1 += st1[i];
}
l = st2.size();
if(l>0)// 有小数则加入'.'
{
s1 += '.';
}
for(i=l-1; i>=0; --i)// 小数部分和入s1
{
s1 += st2[i];
}
if(s1.empty())
{
s1 = "0";
}
//cout<<s1<<endl;
return s1;
}
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 天天加班……还是觉得事情什么都没解决……
- 面试应届毕业生的感想
- 普通计算器在线使用
- 一张神奇的图,有的人能看到向右转,有的人只能看到向左转
- 贪心算法;最小堆+哈夫曼树;打印出每个字母对应编码;调试了几次,应该无错;
- 大数加法
- c++中foreach的一种实现方法
- SMPP Command and Error descriptions
- WINDOWS7没有"发送到桌面快捷方式“
- JdbcTemplate源码
- 高精度模板
- 大数减法
- c语言经典算法~~
- Windows Phone上的相机景深计算器