《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] = '\0'; //打印 printf("%s", result); return 0; }
第八个 浮点数66.66 转 字符串浮点数“66.66” 这里:需要注意一下
习题推荐: