#include<stdio.h> #include<string.h> #include<stdlib.h> int TenNum(char a[],int B); //将输入的数字转换成10进制数 void Numchange(int m, int B); //将转换好了的10进制数转换为所需进制数 int TenNum(char a[], int B) { int len, i, num; int sum = 0; len = strlen(a); //求得字符串长度 for (i = 0; i < len; i++) { if (a[i] >= '0' && a[i] <= '9') num = a[i] - '0'; else if (a[i] >= 'A' && a[i] <= 'F') num = a[i] - 'A' + 10; sum = sum * B + num; } return sum; } void Numchange(int m, int B) { int n; if (m) { Numchange(m / B, B); n = m % B; if (n < 10) printf("%d", n); //小于10直接输出 else printf("%c", n + 55); //大于10转换成字符输出 } } int main() { int B, b; char a[20]; printf("请输入待转换数的进制(2-16):"); do { scanf("%d", &B); } while (B < 2 && B > 16); printf("请输入待转换数:"); getchar(); gets(a); //将输入的n进制数存放在数组a中 int m = TenNum(a, B); //将输入的数字转换成十进制数 printf("请输入须要转成几进制数(2-16):"); do { scanf("%d", &b); } while (B < 2 && B > 16); printf("%d进制数%s转换为%d进制数的结果为:",B,a,b); Numchange(m, b); //将十进制数转换为所需进制数 printf("\n"); system("pause"); return 0; }
二,八,十,十二,十六进制:ios
二进制:0,1 (用于计算机存储信息)
八进制:0,1,2,3,4,5,6,7
十进制:0,1,2,3,4,5,6,7,8,9 (咱们最熟悉的)数组
十二进制:0,1,2,3,4,5,6,7,8,9,A,B
十六进制:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,Fide
这些进制数字很容易转换为十进制spa
举个例子:code
1101:2^3+2^2+2^0=13(2—>10)blog
173:8^2+8^1*7+8^0*3=123(8—>10)ci
3A0:12^2*3+12^1*10+12^0*0=552字符串
...get
总结:任何进制数字转换成为十进制数字的规律:string
每一位进制数字乘自己进制单位乘自身值再相加即为十进制数字
int Tenchange(char a[],int B)//char a[100];任意进制数据串 int B;//它所表明的进制数 Tenchange(a,B); { int len=strlen(a); int sum=0,num; for(int i=0;i<len;i++) { if (a[i] >= '0' && a[i] <= '9') num = a[i] - '0'; else if (a[i] >= 'A' && a[i] <= 'F') num = a[i] - 'A' + 10; sum=sum*B+num; } return sum;//返回十进制数字 }
十进制转任意进制的通用方法:除x取余倒排法(x表明进制数)
例如:将十进制数76转换为任意进制 二进制: 76/2 0 38/2 0 19/2 1 9 1 4 0 2 0 1 1 因此:1001100(2) 八进制: 76/8 4 9 1 1 1 因此:114(8) 十六进制: 76/16 12(C) 4/16 4 因此:4C(16)
char * mychange(int n,int B) //十进制转换为其余进制 (注意:获得的结果是反的) { int t=0; static char b[100]; while(n!=0) { if(n%B>9) b[t]='A'+n%B-10; else b[t]='0'+n%B; n=n/B; t++; } return b; } int main() { char *c=mychange(76,2); for (int i =strlen(c)-1 ; i >=0; i--){
cout << c[i] << " "; } }
char * mychange(int n,int B) //十进制转换为其余进制 (注意:获得的结果是反的) {int t=0;static char b[100]; while(n!=0){if(n%B>9)b[t]='A'+n%B-10;elseb[t]='0'+n%B;n=n/B;t++;}return b;}
int main(){ char a[100]; // gets(a);//获得须要转换的字符串 char *c=mychange(76,2); for (int i = 0 ; i < strlen(c); i++){ cout << c[i] << " "; } cout<<endl; char *d=mychange(76,8); for (int i = 0 ; i < strlen(d); i++){ cout << d[i] << " "; } cout<<endl; char *e=mychange(76,16); for (int i = 0 ; i < strlen(e); i++){ cout << e[i] << " "; } cout<<endl; }
#include<iostream> #include<cstdio> #include<string.h> using namespace std; char answer[1000]; int n; int len=0; int Numchange(int m, int B) { if (m) { Numchange(m / B, B); n = m % B; if (n < 10) answer[len]='0'+n; //小于10直接输出 else answer[len]='A'+n-10; //大于10转换成字符输出 len++; } return len; } int mychange(int len) { int sum=0; for(int i=0;i<len;i++) { if(answer[i]>='0'&&answer[i]<='9') sum+=(answer[i]-'0'); else sum+=(answer[i]-'A'+10); } return sum; } int main() { while(cin>>n&&n!=0) { //10,16,12 len=0; int n1=n,n2=n,n3=n; int a=0,b=0,c=0; Numchange(n, 10); // cout<<len<<"///"; // for(int i=0;i<len;i++) // cout<<answer[i]; a=mychange(len); // cout<<endl<<a<<endl; len=0; Numchange(n1, 16); // cout<<len<<"///"; // for(int i=0;i<len;i++) // cout<<answer[i]; b=mychange(len); // cout<<endl<<b<<endl; len=0; Numchange(n2, 12); // cout<<len<<"///"; // for(int i=0;i<len;i++) // cout<<answer[i]; c=mychange(len); // cout<<endl<<c<<endl; if(a==b&&b==c) cout<<n3<<" is a Sky Number."<<endl; else cout<<n3<<" is not a Sky Number."<<endl; } return 0; }
#include<iostream> #include<string.h> using namespace std; int Tenchange(char a[],int B)//char a[100];任意进制数据串 int B;//它所表明的进制数 Tenchange(a,B); { int len=strlen(a); int sum=0,num; for(int i=0;i<len;i++) { if (a[i] >= '0' && a[i] <= '9') num = a[i] - '0'; else if (a[i] >= 'A' && a[i] <= 'F') num = a[i] - 'A' + 10; sum=sum*B+num; } return sum; } char * mychange(int n,int B) //十进制转换为其余进制 (注意:获得的结果是反的) { int t=0; static char b[100]; while(n!=0) { if(n%B>9) b[t]='A'+n%B-10; else b[t]='0'+n%B; n=n/B; t++; } return b; } int main() { char *c=mychange(76,2); for (int i = 0 ; i < strlen(c); i++){ cout << c[i] << " "; } // delete[] c; cout<<endl; char *d=mychange(76,8); for (int i = 0 ; i < strlen(d); i++){ cout << d[i] << " "; } // delete[] d; cout<<endl; char *e=mychange(76,16); for (int i = 0 ; i < strlen(e); i++){ cout << e[i] << " "; } cout<<endl; }
#include<iostream> #include<string.h> using namespace std; char b[100]; void mychange(int n,int B) //十进制转换为其余进制 (注意:获得的结果是反的) { int t=0; while(n!=0) { if(n%B>9) b[t]='A'+n%B-10; else b[t]='0'+n%B; n=n/B; t++; } } int main() { mychange(76,2); for (int i = 0 ; i < strlen(b); i++){ cout << c[i] << " "; } cout<<endl; char *d=mychange(76,8); for (int i = 0 ; i < strlen(d); i++){ cout << d[i] << " "; } cout<<endl; char *e=mychange(76,16); for (int i = 0 ; i < strlen(e); i++){ cout << e[i] << " "; } cout<<endl; }