UVA - 424 大数相加模板

原题:
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;
}

猜你喜欢

转载自blog.csdn.net/qq_26558047/article/details/86655205