任意进制转换--(62进制)
2012-07-24 21:18
190 查看
题目:62进制(非大数除法实现)
'0'-'9'-----0-9
A-Z-------10-35
a-z--------36-62
具体说明可以参考此博客
http://www.cppblog.com/kuangbin/archive/2011/08/25/154299.html?opt=admin
在此简短说一下:
例如 10进制的18 转换为2进制
被除数 除数 商 余数
1 8 / 2 ---------09 0 ---------- 1轮结束
9 / 2 -------- 4 1 --------- 2轮结束
4 / 2-------- 2 0 --------- 3轮结束
2 / 2 -------- 1 0 --------- 4轮结束
1 / 2 -------- 0 1 ---------- 5轮结束
0 -----------结束
二进制 10010(18)
'0'-'9'-----0-9
A-Z-------10-35
a-z--------36-62
具体说明可以参考此博客
http://www.cppblog.com/kuangbin/archive/2011/08/25/154299.html?opt=admin
在此简短说一下:
例如 10进制的18 转换为2进制
被除数 除数 商 余数
1 8 / 2 ---------09 0 ---------- 1轮结束
9 / 2 -------- 4 1 --------- 2轮结束
4 / 2-------- 2 0 --------- 3轮结束
2 / 2 -------- 1 0 --------- 4轮结束
1 / 2 -------- 0 1 ---------- 5轮结束
0 -----------结束
二进制 10010(18)
#include<iostream> #include<cstdio> #include<cstring> #define N 1005 using namespace std; int StrToNum(char t)//字符--->>数字 { if(t>='0'&&t<='9')return t-'0';//数字 if(t>='A'&&t<='Z')return t-'A'+10;//大写字母 else return t-'a'+36;//小写字母 } char NumToStr(int t)//数字-->>>字符 { if(t>=0&&t<=9)return (t+'0'); if(t>=10&&t<=35)return (t-10+'A'); else return (t-36+'a'); } void conversion(int old_base,int new_base,char t[],int len) { int div ;//被除数 int ans ;//商 int res ;//余数 int i,j,temp_len=len,temp,k=0,m; memset(div,0,sizeof(div)); memset(ans,0,sizeof(ans)); memset(res,0,sizeof(res)); for(i=0;i<len;i++) div[i]=StrToNum(t[i]); while(temp_len>=1)//只要被除数不等于(长度>=1),就继续 { temp=0;//余数 j=0; while(j<temp_len) { temp=temp*old_base+div[j]; ans[j]=temp/new_base; temp%=new_base; j++; } res[k++]=temp; j=0; while(j<temp_len&&ans[j]==0) j++; //去除前导零 memset(div,0,sizeof(div)); for(i=j,m=0;i<temp_len;i++) //商变成新的被除数 div[m++]=ans[i]; temp_len=m; memset(ans,0,sizeof(ans));//清空商 } for(i=k-1;i>=0;i--) cout<<NumToStr(res[i]); cout<<endl; } int main() { int i,test,base_a,base_b,len; char temp ; cin>>test; while(test--) { memset(temp,0,sizeof(temp)); scanf("%d%d%s",&base_a,&base_b,temp); len=strlen(temp); cout<<base_a<<" "; for(i=0;i<len;i++) cout<<temp[i]; cout<<endl; cout<<base_b<<" "; conversion(base_a,base_b,temp,len); } return 0; }
相关文章推荐
- Python 10进制与任意进制之间相互转换(最大为62进制)
- PHP常用函数:62进制转换及任意进制之间转换函数
- 任意十六进制数转换成十进制数----不管你输入多长都能转换
- php 64进制生成和转换类,也可以任意进制
- 无符号十进制整数转换成任意进制数
- 将10进制整数转换任意进制输出
- 转帖:c#任意进制转换(2-36进制之间的转换)
- 任意进制整数之间的相互转换(C++实现)
- 14.2线性表之STL实现10进制向任意进制的转换
- C++趣味编程算法//求一个十进制数转换为任意进制数
- itoa()、atoi()、任意进制转换
- 10进制到任意进制的转换
- 任意进制之间的转换问题 !!!非常nb的代码哦!!
- C++ 十进制'纯'小数转换为任意进制的小数
- Linux下的C语言编程——10进制转换成任意进制的字符串
- 十进制转换任意进制_CJ
- python基础--实现大数到任意进制的转换
- NOJ 1012 进制转换(十进制转换成任意进制)
- itoa()、atoi()、任意进制转换
- Palindrom Numbers 任意进制数转换