ACM内部函数--数学问题--任意进制转换
来源:互联网 发布:中文域名交易平台 编辑:程序博客网 时间:2024/05/17 08:38
第一种方法思想:就是模拟进制转换的过程,用十进制作为转换的中介。
#include <iostream>#include <string>#include <cmath>using namespace std;/*将一个整型数字转化成字符型数字,例如 8->'8',12->'c'*/char numToChar(char num){ /*num是0到9之间的数字*/ if(num<=9&&num>=0){ num+=48; } /*num是10到15之间的数字*/ else{ switch(num){ case 10:num='A'; case 11:num='B'; case 12:num='C'; case 13:num='D'; case 14:num='E'; case 15:num='F'; } } return num;}/*将一个字符型数字转化成整型数字,例如 '8'->8,'c'->12*/int charToNum(char &num){ /*num是0到9之间的字符型数字*/ if(num<='9'&&num>='0'){ num-=48; } /*num是'A'到'F'之间的字符型数字*/ else{ switch(num) { case 'A': case 'a': num=10; case 'B': case 'b': num=11; case 'C': case 'c': num=12; case 'D': case 'd': num=13; case 'E': case 'e': num=14; case 'F': case 'f': num=15; } } return num;}/*将任意进制整数转化为十进制整数,返回转化后的十进制整数,num为任意进制整数,binary为该整数的进制*/int anyBinaryToDecimal(string num,int binary){ int len=num.size(); int decimal_num=0; for(int i=0;i<len;i++){ decimal_num+=charToNum(num[i])*pow(binary,len-i-1); } return decimal_num;}/*将十进制转化为任意进制,decimal为十进制整数,binary为需要转化的进制*/void decimalToAnyBinary(int decimal,int binary){ string result;//保存x进制数 char temp; while(decimal>0){ temp=decimal%binary; result+=numToChar(temp);//将字符串拼接起来 decimal=decimal/binary; } /*输出转化后的x进制整数*/ for(int i=result.size()-1;i>=0;i--) cout<<result[i]; cout<<endl;}int main(){ string num="1f";//十六进制数 int decimal_num=anyBinaryToDecimal(num,16);//将十六进制数转化成十进制数 cout<<decimal_num<<endl;//打印转化后的十进制数 decimalToAnyBinary(decimal_num,8);//将十进制数转化成八进制数,并输出结果 return 0;}
第二种方法:
/** 语法:conversion(char s1[],char s2[],long d1,long d2); 参数:s[]:原进制数字,用字符串表示 s2[]:转换结果,用字符串表示 d1:原进制数 d2:需要转换到的进制数 返回值:null 注意:高于9的位数用大写'A'~'Z'表示,2~16位进制通过验证*/void conversion(char s[],char s2[],long d1,long d2){ long i,j,t,num; char c; num=0; for (i=0;s[i]!='\0';i++) { if (s[i]<='9'&&s[i]>='0') t=s[i]-'0'; else t=s[i]-'A'+10; num=num*d1+t; } i=0; while(1) { t=num%d2; if (t<=9) s2[i]=t+'0'; else s2[i]=t+'A'-10; num/=d2; if (num==0) break; i++; } for (j=0;j<i/2;j++) {c=s2[j];s2[j]=s[i-j];s2[i-j]=c;} s2[i+1]='\0';}
0 0
- ACM内部函数--数学问题--任意进制转换
- ACM小组内部预定函数 数学问题:
- ACM内部函数--数学问题--大数相加
- ACM内部函数--数学问题--大数阶乘
- ACM内部函数--数学问题--大数相乘
- ACM内部函数--数学问题--最大公约数最小公倍数
- ACM内部函数--数学问题--大数乘小数
- ACM内部函数--数学问题--大数相减
- ACM内部函数--数学问题--大数除法和取余
- 任意进制转换函数
- 【ACM之旅】进制转换2 (任意进制转换)
- 任意进制转换
- 任意进制转换
- 任意进制转换
- 任意进制转换
- 任意进制转换
- 任意进制转换!!!
- 任意进制转换
- python多重赋值理解
- [C\C++]读入优化【技巧】
- JobClient
- YTUOJ之判断是否是子串(串)
- 创建IOS的alert界面
- ACM内部函数--数学问题--任意进制转换
- STM32系列第21篇--DMA
- HDU 3068:最长回文【回文字符串】
- SDOI2016 Round 1解题报告
- 第7周-项目2-友元类
- myeclipse编码问题
- nyoj 1091 还是01背包
- ios修改导航栏的title的文字颜色
- unity图片打成图集后图片变模糊