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
提示:
可以用字符串表示不同进制的整数。
相关文章推荐
- 【九度OJ】题目1118:数制转换 解题报告
- 九度OJ-1118-数制转换
- 九度OJ 1118 数制转换
- 九度OJ 1118 数制转换
- 九度OnlineJudge题目1118:数制转换
- 哈理工OJ 1118 火柴棒等式(暴力枚举火柴棒等式 )
- 九度OJ 题目1118:数制转换
- 九度OJ 1118 数制转换
- 题目1118:数制转换
- 题目1118:数制转换
- 数制转换 (九度oj题目44)
- 【caioj 1118】 牛躲雨 --- floyd + 二分 + dinic网络流
- 九度OJ 1118:数制转换 (进制转换)
- 数制转换 (九度oj题目44)
- 九度OJ 1118:数制转换 (进制转换)
- 题目1118:数制转换
- 题目1118:数制转换
- 九度oj-1118-数制转换
- 九度 题目1118:数制转换
- 题目1118:数制转换(2008年北京大学图形实验室计算机研究生机试真题)