进制转化类题目类型:
代码详解及注释解答:
//进制转化问题
#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” 这里:需要注意一下
习题推荐: