Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <string>
- using std::cout;
- using std::cin;
- using std::endl;
- using std::string;
- int convertToNum(char c);
- char convertToChar(int i);
- int cal_gap(int a_i, int b_i);
- string numberToString(int gap);
- int main(){
- while(1){
- string a_s, b_s;
- int a_i = 0, b_i = 0;
- cin >> a_s;
- if (a_s == "#") {
- break;
- }// get out point
- cin >> b_s;
- // convert string to number
- for(int i = 0; a_s[i] != '\0'; i++){
- //a_i += convertToNum(a_s[i]);
- if (convertToNum(a_s[i]) >= convertToNum(a_s[i+1])){
- a_i += convertToNum(a_s[i]);
- }else{
- a_i -= convertToNum(a_s[i]);
- }
- }
- for(int i = 0; b_s[i] != '\0'; i++){
- if (convertToNum(b_s[i]) >= convertToNum(b_s[i+1])){
- b_i += convertToNum(b_s[i]);
- }else{
- b_i -= convertToNum(b_s[i]);
- }
- }
- // cout << "a_i: " << a_i << endl; // debugging
- // cout << "b_i: " << b_i << endl; //debugging
- // calculate the gap between two numbers
- int gap = cal_gap(a_i,b_i);
- // cout << "gap: "<< gap << endl; // debugging
- if (gap == 0){
- cout << "ZERO" << endl;
- continue;
- }else{
- string ans;
- ans = numberToString(gap);
- cout << ans << endl;
- }// end of if
- }// end of while
- }// end of main
- string numberToString(int gap){
- string stringTmp;
- switch(gap/1000){
- case 0:
- break;
- case 1:
- stringTmp += "M";
- break;
- case 2:
- stringTmp += "MM";
- break;
- case 3:
- stringTmp += "MMM";
- break;
- }
- switch(gap%1000/100){
- case 9:
- stringTmp += "CM";
- break;
- case 8:
- stringTmp += "DCCC";
- break;
- case 7:
- stringTmp += "DCC";
- break;
- case 6:
- stringTmp += "DC";
- break;
- case 5:
- stringTmp += "D";
- break;
- case 4:
- stringTmp += "CD";
- break;
- case 3:
- stringTmp += "CCC";
- break;
- case 2:
- stringTmp += "CC";
- break;
- case 1:
- stringTmp += "C";
- break;
- }
- switch(gap%1000%100/10){
- case 9:
- stringTmp += "XC";
- break;
- case 8:
- stringTmp += "LXXX";
- break;
- case 7:
- stringTmp += "LXX";
- break;
- case 6:
- stringTmp += "LX";
- break;
- case 5:
- stringTmp += "L";
- break;
- case 4:
- stringTmp += "XL";
- break;
- case 3:
- stringTmp += "XXX";
- break;
- case 2:
- stringTmp += "XX";
- break;
- case 1:
- stringTmp += "X";
- break;
- }
- switch(gap%1000%100%10/1){
- case 9:
- stringTmp += "IX";
- break;
- case 8:
- stringTmp += "VIII";
- break;
- case 7:
- stringTmp += "VII";
- break;
- case 6:
- stringTmp += "VI";
- break;
- case 5:
- stringTmp += "V";
- break;
- case 4:
- stringTmp += "IV";
- break;
- case 3:
- stringTmp += "III";
- break;
- case 2:
- stringTmp += "II";
- break;
- case 1:
- stringTmp += "I";
- break;
- }
- return stringTmp;
- }
- int convertToNum(char c){
- switch(c){
- case 'I':
- return 1;
- break; //optional
- case 'V':
- return 5;
- break; //optional
- case 'X':
- return 10;
- break; //optional
- case 'L':
- return 50;
- break; //optional
- case 'C':
- return 100;
- break; //optional
- case 'D':
- return 500;
- break; //optional
- case 'M':
- return 1000;
- break; //optional
- }// end of switch
- }
- int cal_gap(int a_i, int b_i){
- return abs((a_i - b_i));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement