• 《N诺机试指南》(五)进制转化


    进制转化类题目类型:

    代码详解及注释解答: 

    //进制转化问题 
    #include <bits/stdc++.h>
    using namespace std;
    
    int main(){ 
    //	1.反序数 123->321
    //	int n;
    //	int sn = 0;//存取反序数
    //	scanf("%d", &n);
    //	while( n!=0 ){
    //		sn = sn * 10;
    //		sn += (n%10);//求出最后一位,即123的3 
    //		n = n/10;//去除最后一位123/10=12 
    //	}
    //	cout << sn << endl; 
    
    //	2.10进制转x进制代码(x小于10的情况)
    //	int n,x;//10进制数和转换进制x
    //	scanf("%d %d", &n, &x);
    //	int result[105];//存储结果 
    //	int count = 0;//result数组下标 
    //	while( n!=0 ){
    //		int w = n%x;
    //		result[count++] = w;
    //		n = n/x;
    //	}
    //	//打印结果,倒序 
    //	for(int i=count-1; i>=0; i--){
    //		cout << result[i] << " ";
    //	} 
    
    //	3.10进制转x进制代码(通用版本)
    //	int n,x;//10进制数和转换进制x
    //	scanf("%d %d", &n, &x);
    //	char result[105];//存储结果(有字符用char型) 
    //	int count = 0;//result数组下标 
    //	while( n!=0 ){
    //		int w = n%x;
    //		if( w<10 ){//小于10,例如:数字6-->'6' 
    //			result[count++] = w+'0';
    //		}else{//大于10,转化成为大写字母 
    //			result[count++] = (w-10)+'A';
    //		} 
    //		n = n/x;
    //	}
    //	//打印结果,倒序 
    //	for(int i=count-1; i>=0; i--){
    //		cout << result[i] << " ";
    //	}  
    
    //	4.2进制转10进制
    //	char s[105];
    //	scanf("%s", &s);
    //	int sum = 0;
    //	for(int i=0; i<strlen(s); i++){
    //		if( s[i]=='0' ){
    //			sum *= 2;
    //		}else{
    //			sum = sum*2+1;
    //		}
    //	}
    //	cout << sum << endl;
    	
    //	5.x进制转10进制(通用)
    //	char s[105];//存储要转换的字符串 
    //	int x;//进制x 
    //	scanf("%s %d", &s, &x);
    //	int sum = 0;
    //	for(int i=0; i<strlen(s); i++){
    //		sum = sum * x;
    //		//如果在0-10之内,直接加上该字符转化成的数字 
    //		if( (s[i]-'0')>=0 && (s[i]-'0')<=9 ){
    //			sum += s[i]-'0';
    //		}else{//否则就是A,B,C...这样的,要转化一下 
    //			sum += (s[i]-'A') + 10;
    //		}
    //	}
    //	cout << sum << endl;
    
    //	6.x进制转化y进制
    //	x进制-->10进制-->y进制 
    //	char s[105];//存储要转换的字符串
    //	char result[105];
    //	int count = 0;//result数组下标 
    //	int x, y;
    //	scanf("%s %d %d", &s, &x, &y);
    //	int sum = 0;
    //	//输入的x进制数转化为10进制数 
    //	for(int i=0; i<strlen(s); i++){
    //		sum = sum * x;
    //		int temp = s[i]-'0';
    //		if( temp>=0 && temp<=9 ){
    //			sum += temp;
    //		}else{
    //			sum += (s[i]-'A')+10;
    //		}
    //	}
    //	//10进制数转化为y进制,存到result数组 
    //	while( sum!=0 ){
    //		int k = sum%y;
    //		if( k<10 ){
    //			result[count++] = k+'0';
    //		}else{
    //			result[count++] = (k-10)+'A';
    //		}
    //		sum = sum/y;	
    //	}
    //	//倒着打印 
    //	for(int i=count-1; i>=0; i--){
    //		cout << result[i] << " ";
    //	}	
    
    //	7.字符串浮点数转浮点数
    //	char s[105];//存字符串浮点数
    //	int pointIndex = 0;//找到小数点'.'在s中的下标 
    //	double sum = 0;//存结果 
    //	scanf("%s", &s);
    //	int len = strlen(s);
    //	//1.找小数点位置 
    //	for(int i=0; i<len; i++){
    //		if( s[i]=='.' ){
    //			break;
    //		}
    //		pointIndex++;
    //	}
    //	//2.计算整数部分 
    //	for(int i=0; i<pointIndex; i++){
    //		sum = sum*10 + (s[i]-'0');	
    //	}
    //	//3.计算小数部分 
    //	int j = 0;
    //	for(int i=pointIndex+1; i<len; i++){
    //		j--;
    //		//pow(x, y)=x的y次方 
    //		double temp = pow(10, j);
    //		sum += (s[i]-'0')*temp; 
    //	}
    //	cout << sum << endl;
    
    //	8.浮点数转字符串 
    	double n;//浮点数
    	char result[105];//存储结果字符串
    	int count = 0;
    	scanf("%lf", &n);
    	//1.先存整数
    	int x = (int)n; 
    	while( x>0 ){
    		result[count++] = x%10 + '0';
    		x /= 10;
    	}
    	//改变存储的整数部分的顺序 
    	for(int i=0; i<count; i++){
    		result[count-i-1] = result[i];
    	}
    	//2.存小数点
    	result[count++] = '.';
    	//3.存小数部分
    	double y = n - int(n);//取出小数部分 
    	for(int i=0; i<10; i++){//后面的超过10位的小数约等于0,不考虑 
    		y = y*10;//例如0.46-->4.6,取出4
    		result[count++] = int(y) + '0';//取出4存进去
    		y = y - int(y) + 1e-11;//4.6-->0.6 
    		//在这里+ 1e-11为了防止精度丢失问题:66.66-->结果:66.659999999 
    	}
    	//去掉后面的0 
    	while(result[--count] == '0');
    	result[++count] = '';
    	//打印 
    	printf("%s", result);
    	 
    	 
    	return 0;
    } 

    第八个 浮点数66.66 转 字符串浮点数“66.66” 这里:需要注意一下

    习题推荐:

  • 相关阅读:
    centos7安装node.js
    docker容器互联,实现目录、服务共享
    解决docker容器中Centos7系统的中文乱码
    修改centos7容器的时间和宿主机时间一致
    linux安装中文字体
    制作OpenOffice的Docker镜像并添加中文字体解决乱码问题
    centos容器yum安装JDK环境
    函数装饰器
    nc(NetCat)命令
    Linux源码包安装程序
  • 原文地址:https://www.cnblogs.com/Whgy/p/12317487.html
Copyright © 2020-2023  润新知