您的位置:首页 > 编程语言 > C语言/C++

EASY_PAT_ADVANCED LEVEL 1058 A+B IN HOGWART 不同进制数字的加法运算

2014-02-25 19:15 537 查看

1058. A+B in Hogwarts (20)

时间限制50 ms内存限制32000 kB代码长度限制16000 B判题程序Standard作者CHEN, YueIf you are a fan of Harry Potter, you would know the world of magic has its own currency system -- as Hagrid explained it to Harry, "Seventeen silver Sickles to a Galleon and twenty-nine Knuts to a Sickle, it's easy enough." Your job is to write a program tocompute A+B where A and B are given in the standard form of "Galleon.Sickle.Knut" (Galleon is an integer in [0, 107], Sickle is an integer in [0, 17), and Knut is an integer in [0, 29)).Input Specification:Each input file contains one test case which occupies a line with A and B in the standard form, separated by one space.Output Specification:For each test case you should output the sum of A and B in one line, with the same format as the input.Sample Input:
3.2.1 10.16.27
Sample Output:
14.1.28
/*
@ AUTHOR	:GAOMINQUAN
@ DATA		:2014 - 2- 25
@ MAIL		:ENSOLEILLY@GMAIL.COM
@ HARD		:EASY **
@ NOTE		:NITICE THE USE OF ISDIGIT(), WHICH COULD MAKE PRO WORK EASIER
*/

#include<iostream>
#include<vector>
#include<string>
#include<cmath>

using namespace std;

vector<int> add_2_vec(vector<int> num1,vector<int> num2){
int tenExp = (int)10e7;
int biggest[] = {tenExp,17,29};
vector<int> ans(3,0);
int addBits = 0;
for(int i = num1.size()-1; i>=0; i--){
//cout<<num1[i]<<" "<<num2[i]<<endl;
int bitSum = num1[i] + num2[i] + addBits;
//cout<<"BS = "<<bitSum<<endl;
addBits = bitSum/biggest[i];
bitSum %= biggest[i];

ans[i] = bitSum;
}
return ans;
}

vector<int> input_to_num_vec(string input){
char node = '.';
int findNum = 0;

int begin = 0;
vector<int> numbers(3,0);

int numI = 0;

int numNum = 2;
for(int i = input.size()-1; i>=0; i--){
if(isdigit(input[i])){
//cout<<input[i]<<" is a digit "<<endl;
findNum += (input[i] - '0') * pow(10,numI);
numI++;
}else{
numI = 0;
numbers[numNum--] = findNum;
findNum = 0;
}
}
numbers[0] = findNum;

return numbers;
}

void add(string input1, string input2){
vector<int> num1 = input_to_num_vec(input1);
vector<int> num2 = input_to_num_vec(input2);
vector<int> add = add_2_vec(num1,num2);
for(int i = 0; i <add.size(); i++){
cout<<add[i];
if(i!=add.size()-1){
cout<<".";
}
}cout<<endl;
}
int main(){
string input1,input2;
cin>>input1>>input2;
add(input1,input2);
return 0;
}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ OJ PAT ZJU