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.27Sample 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/C++数据对齐详细解析
- C++中引用的使用总结
- C与C++之间相互调用实例方法讲解
- C++中引用(&)的用法与应用实例分析
- 解析C++ 浮点数的格式化输出
- 深入分析C++中几个最不常用的关键字
- c++中inline的用法分析
- C++ Primer 第一部分基本语言
- 深入解析C++ Data Member内存布局
- 从汇编看c++中默认构造函数的使用分析
- 关于C++中的友元函数的一些总结
- C++的sstream标准库详细介绍
- 基于C++自动化编译工具的使用详解
- 浅谈C++中的string 类型占几个字节
- C/C++ 宏详细解析
- 深入分析C++中两个大数相乘结果不正确的问题
- 探讨C++中数组名与指针的用法比较分析
- 深入解析C++中的引用类型
- C++可变参数的实现方法