700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 十进制 二进制带小数部分的相互转换

十进制 二进制带小数部分的相互转换

时间:2023-07-13 18:43:34

相关推荐

十进制 二进制带小数部分的相互转换

基本思想

十进制转二进制:

(1) 从键盘读入一串字符型数组。通过 “ . ” 判断十进制数是否含有小数位。

(2) 把整数位和小数位进行分离,分别放入data1和data2数组中。通过atof()函数分别把字符型数组data1、data2转为整数。并对整数和小数部分分别进行进制转换。

(3) 整数部分:根据十进制转二进制的计算特点,声明一个栈,对余数进行存储。

小数部分:小数*2后的整数部分直接输出。

二进制转十进制:

(1) 从键盘读入一串字符型数组。通过“ .”判断二进制数是否含有小数位。

(2) 把整数位和小数位进行分离,分别放入data1和data2数组中。根据二进制转十进制小数部分和整数部分的计算特点,对其分别进行进制转换。

#include<bits/stdc++.h>using namespace std;//十进制转二进制 void oTob(char *data){char data1[100];char data2[100];int i;double X;int len1 = strlen(data);for(i = 0;i < len1;i ++){if(data[i] == '.' || data[i] == '\0') break;data1[i] = data[i];}if(data[i] == '.'){i = i + 1;for(int j = 0;i < len1;i ++,j ++){data2[j] = data[i];}}//整数部分int S = atof(data1);//字符型转整数stack<int> q; //栈while(S != 0){q.push(S%2);S = S / 2;} while(!q.empty()){printf("%d",q.top());q.pop();}//小数部分if(data2[0] != '\0'){X = atof(data2);int len2 = strlen(data2);int j = 0;while(data2[j] != '\0'){X = X / 10;j ++;}printf(".");//小数点 while(1){X = X * 2;int intX = (int)X;printf("%d",intX);X = X - intX;if(X == 0) break;}} }void bToo(char *data){char data1[100];char data2[100];int i;int len = strlen(data);for(i = 0;i < len;i ++){if(data[i] == '.' || data[i] == '\0') break;data1[i] = data[i];}if(data[i] == '.'){i = i + 1;for(int j = 0;i < len;i ++,j ++){data2[j] = data[i];}}//整数部分 int len1;int sum = 0;int sum1 = 1;len1 = strlen(data1);sum += data1[len1 - 1] - '0';for(int j = len1 - 2;j >= 0;j --){sum1 = sum1 * 2;sum += (data1[j] - '0') * sum1;}cout << sum;//小数部分if(data2[0] != '\0'){int len2;sum = 0;sum1 = 1;len2 = strlen(data2);sum += data2[0] - '0';for(int j = 1;j < len2;j ++){sum1 = sum1 * 2;sum += (data2[j] - '0') * sum1;}cout << "." <<sum;}} //十进制包含小数转换二进制//二进制包含小数转换十进制 int main(){char data[100];printf("选择:\n");printf("1 十进制转二进制\n");printf("2 二进制转十进制\n"); int n;scanf("%d",&n);switch(n){case 1 : scanf("%s",data);oTob(data);break;case 2:scanf("%s",data);bToo(data);break;}return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。