// // Created by CC-star on 25-5-6. // #include #include #include int R,num;//需要得到的进制,输入的整数 char num_16[100]; // 十六进制 int R_choice;//原本进制 // void Pr_Start() { // int power = 1; // R进制的幂,从R^0=1开始 // } //十进制转2进制 void DectoBin() { int arr[100],length = 0; while(num){ arr[length++] = num % 2; num/=2; } printf("对应2进制表示为:"); for(int i = length-1;i>=0;i--){ printf("%d",arr[i]); } printf("\n"); } //十进制转R进制 void DectoR() { switch(R){ //十进制转二进制 case 2: DectoBin(); break; //十进制转8进制 case 8: printf("对应8进制表示为:%o\n",num); break; case 10: printf("对应10进制表示为:%d\n",num); break; //十进制转16进制 case 16: printf("对应16进制表示为:%x\n",num); break; default: printf("输入有误!目前只支持2、8、10、16进制间的转换\n"); break; } } //2进制转10进制 void BintoDec() { int s = 0; int i = 0; int power = 1; while (num > 0) { s += (num % 10) * power; power *= 2; num/=10; i++; } num = s; DectoR(); } //8进制转10进制 void OcttoDec() { int s = 0; int i = 0; int power = 1; while (num > 0) { s += (num % 10) * power; power *= 8; num/=10; i++; } num = s; DectoR(); } //16进制转10进制 void HextoDec() { int s = 0; // 十进制结果 int len = strlen(num_16); int power = 1; for(int i = len-1; i >= 0; i--) { int digit; if(num_16[i] >= '0' && num_16[i] <= '9') { digit = num_16[i] - '0'; } else if(num_16[i] >= 'A' && num_16[i] <= 'F') { digit = num_16[i] - 'A' + 10; } else if(num_16[i] >= 'a' && num_16[i] <= 'f') { digit = num_16[i] - 'a' + 10; } else { // 既不是数字也不是字母a-f/A-F,输入错误 printf("错误:输入的不是有效的%d进制数!\n",R_choice); return ; } s = s + digit * power; power *= 16; } num = s; DectoR(); } int Input() { printf("输入你的%d进制数:",R_choice); scanf("%d",&num); while (getchar() != '\n'); if(num < 0) { printf("错误:请输入正数!\n"); return 0; } int tmp = num; int a; while (tmp > 0) { a = tmp % 10; if (a >= R_choice) { printf("错误:输入的不是有效的%d进制数!\n",R_choice); return 0; } tmp /= 10;//去掉个位 } printf("输入你要得到的R进制:"); scanf("%d",&R); while (getchar() != '\n'); return 1; } int C1main(){ int opt; while (1) { printf("---------------------👇进制转换【整数|正数】控制面板👇----------------------\n"); printf("1:2进制转R\n2:8进制转R\n"); printf("3:10进制转R\n4:16进制转R\n"); printf("0.返回主控制台\n"); printf("-----------------------👆选择对应数字👆------------------------\n"); printf("请输入选择:"); scanf("%d", &opt); //固定原始数字的进制 if (opt == 1) { R_choice =2; }else if(opt == 2) { R_choice=8; }else if(opt == 3) { R_choice=10; }else if(opt == 4) { R_choice=16; } switch (opt) { case 1://2进制转R if(Input() == 1) { BintoDec(); } break; case 2://8进制转R if(Input() == 1) { OcttoDec(); } break; case 3://10进制转R if(Input() == 1) { DectoR(); } break; case 4://16进制转R printf("输入你的16进制数:"); scanf("%s", num_16); printf("输入你要得到的R进制:"); scanf("%d",&R); HextoDec(); break; case 0: printf("⚠️返回主控制台中...⚠️\n"); return 0; default: printf("⚠️输入有误,请重新输入⚠️\n"); break; } } }