二师弟的星际加法

来源:互联网 发布:英雄联盟mac国服下载 编辑:程序博客网 时间:2024/06/11 19:36

我是网络公司的一名普通程序员,英文名Steven,发音比较像“师弟”,自从入职培训自我介绍后,大家就称我为“二师弟”,我喜欢看科幻小说,也喜欢做梦,有一次梦到外星球,发现外星人使用的并非10进制/16进制等,有些星球居然使用N进制(据统计N都在2~35之间),现在我们将首先给您一个数字表示N进制,然后给出两个数字的字符串,请算出其求和结果并输出,如果输入不能正常计算则输出-1。

 

说明:

1:数字的字符串其中包括0-9和a-z(表示10-35)。

2:所有的输入和输出都只会是小写字母或数字,不存在其他字符。


/*2-35进制加法,大数相加*/#include<iostream>#include<string>using namespace std;int N_To_Int(string src, int N);string Int_to_N(int src, int N);string revert(string s){for (int i = 0, j = s.size() - 1; i < j; i++, j--){char tmp;tmp = s[i];s[i] = s[j];s[j] = tmp;}return s;}int main(){int N;cin >> N;if (N > 35){cout << -1;return 0;}string s1 = "";string s2 = "";cin >> s1 >> s2;s1=revert(s1);s2=revert(s2);string result = "";int lenght1 = s1.size();int lenght2 = s2.size();int max = lenght1 > lenght2 ? lenght1 : lenght2;if (lenght1<lenght2)for (int i = 0; i<lenght2 - lenght1; i++)s1 += '0';if (lenght1>lenght2)for (int i = 0; i<lenght1 - lenght2; i++)s2+= '0';int carry = 0;for (int i = 0; i <max;i++){int x;if (s1[i]>'9')x = s1[i] - 'a' + 10;elsex = s1[i] - '0';int y = ((s2[i]>'9')? s2[i] - 'a'+10 : s2[i] - '0');int a=x+y+carry;carry = a/N;a = a%N;char b = a > 9 ? a + 'a' - 10 : a + '0';result+= b;}string s_carry = "";if (carry > 0)s_carry = carry + '0';result += s_carry;result = revert(result);cout << result << endl;return 0;}


0 0