二师弟的星际加法
2016-03-31 22:01
387 查看
我是网络公司的一名普通程序员,英文名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;} |
相关文章推荐
- mysql命名规范
- Linux命令(4):cat命令
- WCF分分钟入门
- 3145 汉诺塔游戏——http://codevs.cn/problem/3145/
- 20145229吴姗珊 《Java程序设计》小总结
- [Apio2012][Treap]派遣
- 区块链技术资料
- poj 1001 Exponentiation(大数)
- 用布尔型输出从0到一个数中间被三整除的数
- PHP的配置
- C++primer 练习10.16
- hdu 5652 India and China Origins(二分+bfs || 并查集)BestCoder Round #77 (div.2)
- 160331
- struts2工作流程
- 蘑菇街在线笔试题
- 软考中高项学员:2016年3月28日作业
- 【bzoj2022】弹飞绵羊
- leetcode_154 Find Minimum in Rotated Sorted Array II
- jquery中生成一个带cha的tag
- [C#]UDP通讯