【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;}
阅读全文
0 0
- 【C++】联发科初赛第三题《进制数转换》
- 蓝桥杯初赛第三题
- 2011蓝桥杯初赛第三题
- 编程之美初赛第三题
- 第六届蓝桥杯JAVAB组初赛第三题
- 2012第三届蓝桥杯C语言本科初赛题目 整理 1
- 【C++】联发科初赛第一题《最大序列和》
- 【C++】联发科初赛四题《求最大最小数》
- 2012百度之星初赛:C题
- 编程之美初赛C题总结
- 金山西山居2013程序挑战赛初赛 第三题
- 编程之美初赛第三题 活动中心 (三分法)
- 2015编程之美初赛第三题质数相关
- 计蒜客 初赛 第三场 A题:腾讯手机地图
- 第三届蓝桥杯初赛6大数乘法填空题
- NOIP初赛准备:第三课时
- 蓝桥杯 2011第二届c语言初赛第十题
- 百对之星初赛第二场c题
- Team的创建和规划
- 希尔排序
- poj 3317 Stake Your Claim(极大极小搜索经典 a-b+剪枝+记忆化dp)
- java学习记录(1)-jvm安装
- Java —— 多线程笔记 三、线程通信 与 线程组、线程异常
- 【C++】联发科初赛第三题《进制数转换》
- 计蒜客 2017 NOIP 提高组模拟赛(一)Day1
- 什么叫工业4.0,这篇接地气的文章终于讲懂了
- 减小包大小
- ubuntu14.04中安装NVIDIA(GTX650)驱动以及cuda8.0
- 【Java学习笔记】Comparable接口的实现和使用
- js遍历对象和遍历数组
- hdu6198 17沈阳网络赛 矩阵快速幂
- spring+activeMq搭建出现的问题