原题:
UVA-424
题目意思就是一个int不可能包括的数(非常大的数)不断相加(最多100个),输出最后得到的结果。
这里涉及到一个大数相加的模板
模板参考:
大数模板
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <stdexcept>
using namespace std;
#define MAXN 1000
int a[MAXN],b[MAXN];
int main(int argc, const char * argv[])
{
string str1,str2;//保存输入
long int len1,len2;
long int i,j,k;
int up;
/*输入流程*/
cin>>str1>>str2;
/*初始化各量*/
len1 = str1.length();
len2 = str2.length();
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
/*注意,必须倒着保存数据*/
for (i = len1 - 1, k = 0; i != -1; -- i)
{
a[k] = str1[i] - '0';
k++;
}
for (j = len2 - 1, k = 0; j != -1; -- j)
{
b[k] = str2[j] - '0';
k++;
}
for (i = 0, up = 0; i < MAXN; ++ i)
{
a[i] = a[i] + b[i] + up;
up = a[i] / 10;
a[i] %= 10;
}
for (i = MAXN - 1; i != -1; -- i)
{
if (a[i])
{
break;
}
}
for (k = i; k != -1; --k)
{
cout<<a[k];
}
return 0;
}
将模板加以改进就会得到AC代码(没有最后的cout<<endl不能AC)
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
const int maxn = 30005;
int xxx[maxn];
int yyy[maxn];
int main()
{
string a[1];
int limit = 1;
memset(yyy, 0, sizeof(yyy));
while (limit)
{
cin >> a[0]; //每次都输入到a数组;
int len1;
len1 = a[0].length();
if (len1 == 1 && a[0][0] == '0') //如果输入到0,则停止输出;
break;
memset(xxx, 0, sizeof(xxx));
for (int i = len1 -1 ,j = 0 ; i != -1 ; i--,j++) //倒叙存进数组;
{
xxx[j] = a[0][i] - '0';
}
int jianzhiwei = 0;
for (int i = 0; i < maxn; i++)
{
yyy[i] = xxx[i] + yyy[i] + jianzhiwei ; //保证进位;
jianzhiwei = yyy[i] / 10 ;
yyy[i] = yyy[i] % 10;
}
}
int front_zero = maxn - 1; int start;
bool flag = true;
for (; front_zero != -1; front_zero--)
{
if (yyy[front_zero] != 0)
{
flag = false;
break;
}
}
if (flag)
{
cout << "0" << endl;
}
else
{
for (; front_zero != -1; front_zero--)
{
if (yyy[front_zero] != 0)
{
start = front_zero;
break;
}
}
for (; start != -1; start--)
{
cout << yyy[start];
}
}
cout << endl;
system("pause");
return 0;
}