【笔试】n进转换

原创 2016年08月28日 18:29:58

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

#include <iostream>
#include <string>
#include <algorithm>
#include <math.h>
#include <vector>
using namespace std;
int main()
{
int n;
int iNum = 0;/////
string str1, str2;
while (cin >> n >> str1 >> str2)
{
if (n >= 2 && n <= 35)//////断言进制是否满足要求
{
int sumStr1 = 0;
int sumStr2 = 0;
string::iterator it1 = max_element(str1.begin(), str1.end());
string::iterator it2 = max_element(str2.begin(), str2.end());
reverse(str1.begin(), str1.end());
reverse(str2.begin(), str2.end());
vector<char>chVec;//存放n进制的每一位
if (n <= 10)
{
if (*it1 > '0' + n - 1 || *it2 > '0' + n - 1)
{
cout << -1 << endl;
return -1;
}
else
{
for (int i = 0; i < str1.size(); i++)
{
int n1 = str1[i] - '0';
sumStr1 += n1*pow((float)n, i);
}
for (int i = 0; i < str2.size(); i++)
{
int n1 = str2[i] - '0';
sumStr2 += n1*pow((float)n, i);
}
}
int sum = sumStr1 + sumStr2;
do
{
//iNum++;
chVec.push_back(sum%n+'0');
sum = sum / n;
} while (sum != 0);
reverse(chVec.begin(), chVec.end());
copy(chVec.begin(), chVec.end(), ostream_iterator<char>(cout, ""));
/*for (int i = 0; i < chVec.size(); i++)
{

cout << chVec[i];
}*/
cout << endl;
//cout << sumStr1 + sumStr2 << endl;
//return sumStr1+sumStr2;
}
else
{
if (*it1 > 86 + n || *it2 > 86 + n)
{
cout << -1 << endl;
return -1;
}
else
{
for (int i = 0; i < str1.size(); i++)
{
if (str1[i] >= '0' && str1[i] <= '9')
{
int n1 = str1[i] - '0';
sumStr1 += n1*n1*pow((float)n, i);
}
else
{
int n1 = str1[i] - 'a'+10;
sumStr1 += n1*pow((float)n, i);
}
}
for (int i = 0; i < str2.size(); i++)
{
if (str2[i] >= '0' && str2[i] <= '9')
{
int n1 = str2[i] - '0';
sumStr2 += n1*pow((float)n, i);
}
else
{
int n1 = str2[i] - 87;
sumStr2 += n1*pow((float)n, i);
}
}
}
int sum = sumStr1 + sumStr2;
//cout << sum << endl;
do
{
//iNum++;
if (sum%n >= 10)
chVec.push_back(sum%n-10+'a');
else
chVec.push_back(sum%n+'0');
sum = sum / n;
} while (sum != 0);
reverse(chVec.begin(),chVec.end());
copy(chVec.begin(),chVec.end(),ostream_iterator<char>(cout,""));

cout << endl;
//cout << sumStr1 + sumStr2 << endl;
//return sumStr1+sumStr2;
}
}
}
system("pause");
return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

C++ 二进制、十进制、八进制和十六进制 转换

在C++中,默认状态下,数据按十进制输入输出。如果要求按八进制或十六进制输入输出,在cin或cout中必须指明相应的数据形式,oct为八进制,hex为十六进制,dec为十进制。但是二进制没有默认的输出...
  • chiliaolm
  • chiliaolm
  • 2016年05月30日 10:38
  • 3398

n个元素进栈,出栈顺序问题

近日在复习数据结构,看到栈的时候,发现1个元素进栈,有1种出栈顺序;2个元素进栈,有2种出栈顺序;3个元素进栈,有5种出栈顺序,那么一个很自然地问题就是n个元素进栈,共有多少种出栈顺序? ...
  • wqiang10
  • wqiang10
  • 2014年11月20日 20:23
  • 1508

n个元素进栈,共有多少种出栈顺序

1.基于栈的问题分析我们把n个元素的出栈个数的记为f(n), 那么对于1,2,3, 我们很容易得出: f(1) = 1 /...
  • sinat_29912455
  • sinat_29912455
  • 2016年07月18日 22:50
  • 2769

m进制转换为n进制-任意进制转换算法

这种题也是一道经典的面试题,主要考察进制转换细想,Coding质量等。     当我们把十进制转成二进制的时候,我们通过辗转相除,取余,逆置余数序列的过程得到新的进制的数。因此我们可以借助这种思想把...
  • a10615
  • a10615
  • 2015年01月14日 16:03
  • 8379

2014各大网络公司校招笔试算法题(收集并更新中)

从博客中整理,并不断的更新,供大家学习和交流,随后会给出部分算法题的参考代码。 腾讯   1、请设计一个排队系统,能够让每个进入队伍的用户都能看到自己在 中所处的位置和变化。...
  • u012138828
  • u012138828
  • 2014年08月25日 13:35
  • 1246

百度2017秋招笔试编程题

1.[编程题] 买帽子时间限制:1秒 空间限制:32768K度度熊想去商场买一顶帽子,商场里有N顶帽子,有些帽子的价格可能相同。度度熊想买一顶价格第三便宜的帽子,问第三便宜的帽子价格是多少? 输入描...
  • NichChen
  • NichChen
  • 2017年07月10日 20:37
  • 676

n个元素顺序进栈,那么出栈的顺序有多少种?

我们把n个元素的出栈个数的记为f(n), 那么对于1,2,3, 我们很容易得出:   f(1) = 1  f(2) = 2  f(3) = 5  然后我们来考虑f(4), 我们给4个元素编号为1,2...
  • u010355144
  • u010355144
  • 2015年04月18日 21:38
  • 1410

n个元素进栈,共有多少种出栈顺序?

来源http://blog.csdn.net/zyearn/article/details/7758716 近日在复习数据结构,看到栈的时候,发现1个元素进栈,有1种出栈...
  • me4weizhen
  • me4weizhen
  • 2016年09月21日 22:36
  • 2181

网易雷火盘古实习2018笔试题

第一次笔试没有参加,但是牛客上已经有题了,很遗憾只做出前两道.感觉有很多要注意的地方,要不然根本做不完啊. 题目1: 给定一个字符串,请你将字符串重新编码,将连续的字符替换成“连续出现的个数+字符”。...
  • u010009169
  • u010009169
  • 2017年03月10日 20:04
  • 2804

2016网易内推笔试编程题合集(一)

本文章收录了2016年暑期网易内推笔试编程题合集(一),共八题,题目来源于牛客网。...
  • jhgkjhg_ugtdk77
  • jhgkjhg_ugtdk77
  • 2016年08月12日 16:54
  • 8988
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【笔试】n进转换
举报原因:
原因补充:

(最多只允许输入30个字)