您的位置:首页 > 其它

OJ_1118 数制转换

2014-02-22 19:40 148 查看
#include <iostream>
#include <vector>
using namespace std;

void stringToInt(string s,vector<int> &ve)
{
for(int i=0;i<s.size();i++)
{
int k=0;
if(s[i]<='9'&&s[i]>='0')
k=s[i]-'0';
else
{
if(s[i]>='a')k=s[i]-'a'+10;
else if(s[i]>='A')k=s[i]-'A'+10;
}
ve.push_back(k);
}
}
void change(vector<int> ve,vector<int> &result,int m,int n)
{
int i=0;
while(i<ve.size())// 当该数除为0时,即全部为0
{
int r=0;// 每次的余数

for(int j=i;j<ve.size();j++)
{
int t=m*r+ve[j];// 上一位的余数+该位上的数字
int div=t/n;// n进制
ve[j]=div;//  保存该位除法的商
r=t%n;//  该位的余数
}
// 一次除法计算完毕后
result.push_back(r);// 将该次取余值保存
while(ve[i]==0)i++;// 把前置0略去,全部为0时i增加到ve.size()即跳出循环
}
}
void output(vector<int> v)
{

for(int i=v.size()-1;i>=0;i--)
{

if(v[i]>=10)
{
char c=v[i]-10+'A';// 输出为小写
cout<<c;
}else
cout<<v[i];
}
cout<<endl;
}
void func()
{
int m,n;
string s;
while(cin>>m>>s>>n)
{

vector<int> ve;
stringToInt(s,ve);
vector<int> result;
change(ve,result,m,n);
output(result);

}

}
int main(int argc, char *argv[])
{

//printf("Hello, world\n");
func();
return 0;
}


大数除法取余

题目描述:

求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。

不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。

输入:

输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。

数据可能存在包含前导零的情况。

输出:

可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。

样例输入:
15 Aab3 7


样例输出:
210306


提示:

可以用字符串表示不同进制的整数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: