两个大数相加问题,有一点点问题!
vector的rend()成员函数返回的迭代器是指向第一个值的前一个位置吧?看程序中最后输出结果的时候,
为什么要-1才能正确?请帮忙看看
#include <iostream>
#include <string>
#include <vector>
#include <cstdlib> //atoi
using namespace std;
int main()
{
string szFirst;
string szSecond;
string szNull;
vector<int> vec;
int nCarrybit = 0; //进位
while (cin >> szFirst >> szSecond)
{
int nLenOfFirst = szFirst.size();
int nLenOfSecond = szSecond.size();
int i = nLenOfFirst ;
int j = nLenOfSecond;
int k = 0;
while (i >= 0 && j >= 0)
{
string tmp1 = szNull + szFirst[i--];
string tmp2 = szNull + szSecond[j--];
int tmp = atoi(tmp1.c_str()) + atoi(tmp2.c_str());
vec.push_back(tmp % 10 + nCarrybit);
nCarrybit = tmp / 10;
}
if (nCarrybit != 0)
{
string tmp1 = szNull + szFirst[i--];
string tmp2 = szNull + szSecond[j--];
if (i >= 0)
vec.push_back(nCarrybit + atoi(tmp1.c_str()));
if (j >= 0)
vec.push_back(nCarrybit + atoi(tmp2.c_str()));
}
while (i >= 0)
{
string tmp1 = szNull + szFirst[i--];
vec.push_back(atoi(tmp1.c_str()));
}
while (j >= 0)
{
string tmp2 = szNull + szSecond[j--];
vec.push_back(atoi(tmp2.c_str()));
}
for (vector<int>::reverse_iterator iter = vec.rbegin(); iter < vec.rend()-1; ++iter)
{
cout << *iter;
}
cout << endl;
vec.clear(); //清空容器
}
return 0;
}
[解决办法]
以前写过一个:
http://blog.csdn.net/agoago_2009/article/details/6862290
[解决办法]
我也写过大数的加减乘除
[解决办法]
int nLenOfFirst = szFirst.size(); int nLenOfSecond = szSecond.size(); int i = nLenOfFirst ; int j = nLenOfSecond;
[解决办法]
#include <stdio.h>#include <string.h>#define MAXLEN 1000char a1[MAXLEN];char a2[MAXLEN];static int v1[MAXLEN];static int v2[MAXLEN];static int v3[MAXLEN];int i,j,n,L,z;void main(void) { scanf("%d",&n); for (j=0;j<n;j++) { scanf("%s%s",a1,a2); L=strlen(a1); for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0'; L=strlen(a2); for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0'; for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i]; for (i=0;i<MAXLEN;i++) { if (v3[i]>=10) { v3[i+1]+=v3[i]/10; v3[i]=v3[i]%10; } } printf("Case %d:\n", j+1); printf("%s + %s = ", a1, a2); z=0; for (i=MAXLEN-1;i>=0;i--) { if (z==0) { if (v3[i]!=0) { printf("%d",v3[i]); z=1; } } else { printf("%d",v3[i]); } } if (z==0) printf("0"); printf("\n"); }}//Sample Input//3//0 0//1 2//112233445566778899 998877665544332211////Sample Output//Case 1://0 + 0 = 0//Case 2://1 + 2 = 3//Case 3://112233445566778899 + 998877665544332211 = 1111111111111111110
[解决办法]
if (nCarrybit != 0){string tmp1 = szNull + szFirst[i--];string tmp2 = szNull + szSecond[j--];if (i >= 0)vec.push_back(nCarrybit + atoi(tmp1.c_str()));if (j >= 0) vec.push_back(nCarrybit + atoi(tmp2.c_str()));} while (i >= 0) {string tmp1 = szNull + szFirst[i--]; vec.push_back(atoi(tmp1.c_str())); } while (j >= 0) {string tmp2 = szNull + szSecond[j--]; vec.push_back(atoi(tmp2.c_str())); }