n诺计算机机试百度云,《N诺机试指南》(五)进制转化

进制转化类题目类型:

f8c257917856e84cbb6582f136938eb8.png

代码详解及注释解答:

//进制转化问题

#include

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

//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

//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

//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

//if( s[i]=='.' ){

//break;

//}

//pointIndex++;

//}

2.计算整数部分

//for(int i=0; i

//sum = sum*10 + (s[i]-'0');

//}

3.计算小数部分

//int j = 0;

//for(int i=pointIndex+1; 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

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” 这里:需要注意一下

b0151c8a3b22fb470c7fcb379bb94942.png

习题推荐:

3f4a7a68eb3720afa4836cf085bf9be2.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值