【C++】联发科初赛第三题《进制数转换》

来源:互联网 发布:上海大剧院 座位 知乎 编辑:程序博客网 时间:2024/06/15 23:15
/*进制数转换给你4个正整数。第一个是2进制,第二个为8进制,第三个为10进制,第四个为16进制。请依次给出:    2进制数的8进制、10进制、16进制形式。    8进制数的2进制、10进制、16进制形式。    10进制数的2进制、8进制、16进制形式。    16进制数的2进制、8进制、10进制形式。解题思想,以10进制作为中介*/// 初级版本,仅适用于十六进制1位的情况#include <iostream>#include <stdlib.h>#include <string>#include <sstream>#include <math.h>using namespace std;char* To_Binary(int iVal, int index, char *ch[12]){int i, Cnt_unique = 0, T;int flag = 0;for (i = 16; i >= 0; --i) // 八进制转二进制{T = iVal & (1 << i);if (T >= 1){ch[index][Cnt_unique] = '1';flag = 1;}if (T == 0 && flag == 1)ch[index][Cnt_unique] = '0';if (flag == 1)++Cnt_unique;}ch[index][Cnt_unique] = 0;return ch[index];}int main(){FILE *fpSrc, *fpDes;fpSrc = fopen("execute.stdin", "r");   // 打开[没有则创建]文件读取数据fpDes = fopen("destfile.stdin", "w");  // 打开文件写入数据if (fpSrc == NULL || fpDes == NULL){   printf("文件打开错误!");exit(-1); // 非正常退出}char Tmp, *ch[12], a[12];int arrInt[10];int i, len = 0, iTmp = 0, index = 0;int BaseArr[4] = {2, 8, 10, 16};while (fscanf(fpSrc, "%s", a) == 1 && index < 3) // 将2/8/10进制 转为10进制数{ch[index] = (char *)malloc(sizeof(char));len = strlen(a);memcpy(ch[index], a, len);ch[index][len] = 0;for (i = 0; i < len; i++) // 1.二进制转十进制iTmp += (ch[index][i] - 48) * pow(BaseArr[index], len-1-i);arrInt[index] = iTmp;++index;iTmp = 0;}// 4.十六进制数 转为10进制数fscanf(fpSrc, "%s", a);ch[index] = (char *)malloc(sizeof(char));len = strlen(a);memcpy(ch[index], a, len);ch[index][len] = 0;arrInt[index] = 0;for (i = 0; i < len; i++) // 2.八进制转十进制{   if (ch[index][i] >= '0' && ch[index][i] <= '9')iTmp = ch[index][i] - 48;else if (ch[index][i] >= 'A' && ch[index][i] <= 'F')iTmp = ch[index][i] - 65 + 10;else if (ch[index][i] >= 'a' && ch[index][i] <= 'F')iTmp = ch[index][i] - 97 + 10;arrInt[index] += iTmp* pow(16, len-1-i);}fclose(fpSrc);// 第一个index = 0;sprintf(ch[index++], "%o", arrInt[0]);//0sprintf(ch[index++], "%d", arrInt[0]);//0sprintf(ch[index++], "%x", arrInt[0]);//2// 第二个ch[index] = To_Binary(arrInt[1], index, ch);ch[++index] = (char *)malloc(sizeof(char));sprintf(ch[index], "%d", arrInt[1]);//0ch[++index] = (char *)malloc(sizeof(char));sprintf(ch[index], "%x", arrInt[1]);//0// 第3个:10进制数++index;ch[index] = (char *)malloc(sizeof(char));ch[index] = To_Binary(arrInt[2], index, ch);ch[++index] = (char *)malloc(sizeof(char));sprintf(ch[index], "%o", arrInt[2]);//0ch[++index] = (char *)malloc(sizeof(char));sprintf(ch[index], "%x", arrInt[2]);//0// 第4个:16进制数++index;ch[index] = (char *)malloc(sizeof(char));ch[index] = To_Binary(arrInt[3], index, ch);ch[++index] = (char *)malloc(sizeof(char));sprintf(ch[index], "%o", arrInt[3]);//0ch[++index] = (char *)malloc(sizeof(char));sprintf(ch[index], "%d", arrInt[3]);//0for (i = 0; i < 12; i++){if (i%3 == 2)cout << ch[i] << endl;elsecout << ch[i] << " ";}system("pause");return 0;}

原创粉丝点击