加法进位我不会
题目:
这个考虑到进位,因为,比如:ceil(9/2)=5, 9+5=14,要进位,否则是%67
我没有加法进位的c++程序:
#include
using namespace std;
int main()
{
string s1,t,x;
double temp,tt,mc;
getline(cin,s1);
t=s1;
reverse(t.begin(),t.end());
if(t==s1)
{
for(int i=0;i'0';
temp=tt/2;
mc=ceil(temp);
int sb=tt+'0'+mc;
cout<<char(sb);
}
}
else
{
cout<<"No huiwen";
}
return 0;
}
十分感谢大家回复
从低位往高位判断,如果低位增量后需要进位,则将次低位的的增量加加。
文章:C++的高精度加法 中也许有你想要的答案,请看下吧 CUnsignedBigInt& CUnsignedBigInt::operator+=(const CUnsignedBigInt& n)
{
bool carry = 0;//进位
auto iter1 = m_data.rbegin();
auto iter2 = n.m_data.rbegin();
for (; iter1 != m_data.rend() && iter2 != n.m_data.rend(); ++iter1, ++iter2)
{
int t = *iter1 + *iter2 + carry;
*iter1 = t % CUnsignedBigInt::m_radix;
carry = t / m_radix;
}
bool flag = (iter1 == m_data.rend());//容量用完了吗?
if (flag)//容量用完,同时说明n可能还有位没加!
{
while (iter2 != n.m_data.rend())
{
int t = *iter2 + carry;
carry = t / m_radix;
m_data.push_front(t % m_radix);
++iter2;
}
if (carry)
{
m_data.push_front(1);
}
}
else//容量没用完,说明n已经加完,直接考虑最后的进一就行
{
while (carry)
{
if (flag)
{
m_data.push_front(1);//进一
break;
}
else
{
int t = *iter1 + carry;
*iter1 = t % m_radix;
carry = t / m_radix;
flag = (++iter1 == m_data.rend());
}
}
}
return *this;
}