ZOJ 1205 解题报告

ZOJ 1205 解题报告
写了两个parse加 大数类就解决了,基本不难.
Code
 1#include "BigInteger.h"
 2#include <iostream>
 3#include <string>
 4using namespace std;
 5
 6int ConvertToInt(char c)
 7{
 8    if(isdigit((int)c))
 9        return c - '0';
10    else
11        return c - 'a' + 10;
12}

13
14char ConvertToChar(int value)
15{
16    if(value < 10)
17        return value + '0';
18    else
19        return value - 10 + 'a';
20}

21
22int _tmain(int argc, _TCHAR* argv[])
23{
24    string a, b;
25    while(cin >> a >> b)
26    {
27        int a_length = a.length();
28        int b_length = b.length();
29
30        BigInteger big_a(0), big_b(0);
31        BigInteger p(20), zero(0);
32        for(int i = a_length - 1; i >= 0--i)
33        {
34            big_a = big_a + BigInteger(ConvertToInt(a.at(i))) * p.Pow(a_length - 1 - i);
35        }

36        for(int i = b_length - 1; i >= 0--i)
37        {
38            big_b = big_b + BigInteger(ConvertToInt(b.at(i))) * p.Pow(b_length - 1 - i);
39        }

40        BigInteger result = big_a + big_b;
41        vector<char> r;
42        if(result == zero)
43        {
44            cout << "0" << endl;
45            continue;
46        }

47        while(result != zero)
48        {
49            BigInteger big_integer = result % p;
50            r.push_back(ConvertToChar(big_integer.GetIntValue()));
51            result = result / p;
52        }

53
54        vector<char>::reverse_iterator end = r.rend();
55        for(vector<char>::reverse_iterator ite = r.rbegin(); ite != end; ++ite)
56        {
57            cout << (*ite);
58        }

59        cout << endl;
60    }

61    return 0;
62}

63

你可能感兴趣的:(ZOJ 1205 解题报告)