今天天着实有点小冷,只做了一些题目
基本上是水题,挑几道略微不常规的题来复盘吧
内容不多,不设目录了
16进制转10进制#include#include #include using namespace std; double power(int); string a; int main() { getline(cin,a); int len=a.length(); double sum=0; int temp; for(int i=len-1, k=0;i>=0;i--,k++) { switch(a[i]) { case '0': temp=0; break; case '1': temp=1; break; case '2': temp=2; break; case '3': temp=3; break; case '4': temp=4; break; case '5': temp=5; break; case '6': temp=6; break; case '7': temp=7; break; case '8': temp=8; break; case '9': temp=9; break; case 'A': temp=10; break; case 'B': temp=11; break; case 'C': temp=12; break; case 'D': temp=13; break; case 'E': temp=14; break; case 'F': temp=15; break; } sum+=temp*power(k); } printf("%.0lf",sum); return 0; } double power(int n) { double sum=1; for(int i=1;i<=n;i++) { sum*=16; } return sum; }
这类型题一个可能坑点就是计算幂指会超时 当然这题没有(在写这题的时候我想起来的)
一般来说自己写的pow函数会比自带的pow函数快,因为自带的可以计算浮点型的小数次方
而我们只需要求整数的就行了
01字串我的思路: 之前做过一个题(Y老师的小镇),求一个数的二进制直接
while(num) { cout<这样 得到的是其二进制的倒序
只要将其存入数组在倒序输出5个就是答案了
#include#include #include using namespace std; int a[10]; int main() { for(int i=0;i<32;i++) { int temp=i; int k=0; while(temp) { a[k++]=temp%2; temp/=2; } for(int j=4;j>=0;j--) { cout< 然后写完后去网上搜了搜
发现还有更优的解法(第二种)
根据题目直接取巧,实际上也是模拟手算 /2 再取余
16进制转8进制(100000位)
高精度的题目,始终是过不去的坎
尝试了将近一个小时,还是解决了
(参考了)结合之前的题目,自己写了一个16的pow函数计算10进制
再讲十进制num% 再*10扩位
最后取余输出(当没出现非零前 且取余为0时不输出0)
显示答案错误,应该是爆了或者超时了
以下是参考后的答案:
利用了字符串string的可加性
一个8进制数有3位二进制组成 所以保持3的倍数 不够就补前置0
把前三位拿出来 如果都是0不要加 不能输出
如果前三位是0 则后面加起来就算是0也直接变成字符串加进去了 结束->输出
为0的情况也能满足 进制转换真神奇
#include#include #include #include #include #include #include #include using namespace std; int main() { int n; int i, k; cin >> n; while(n--) { string op; string sixteen; string eight; cin >> sixteen; for ( i = 0; i < sixteen.length(); i++) { switch (sixteen[i]) { case '0': op += "0000"; break; case '1': op += "0001"; break; case '2': op += "0010"; break; case '3': op += "0011"; break; case '4': op += "0100"; break; case '5': op += "0101"; break; case '6': op += "0110"; break; case '7': op += "0111"; break; case '8': op += "1000"; break; case '9': op += "1001"; break; case 'A': op += "1010"; break; case 'B': op += "1011"; break; case 'C': op += "1100"; break; case 'D': op += "1101"; break; case 'E': op += "1110"; break; case 'F': op += "1111"; break; } } if (op.length() % 3 == 1) op = "00" + op; if (op.length() % 3 == 2) op = "0" + op; if (op[0] !='0' || op[1] !='0' || op[2] != '0') { char temp; temp = (op[0] - '0') * 4 + (op[1] - '0') * 2 + op[2]; eight += temp; } for ( i = 3; i < op.length(); i += 3) { eight += (op[i] - '0') * 4 + (op[i + 1] - '0') * 2 + op[i + 2]; } cout << eight << endl; } return 0; } 进制转换真神奇
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)