本文共 1051 字,大约阅读时间需要 3 分钟。
给定n个十六进制正整数,输出它们对应的八进制数。
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出n行,每行为输入对应的八进制正整数。
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。2
39 123ABC71
4435274先将十六进制数转换成某进制数,再由某进制数转换成八进制。
先将16进制数转换成2进制数,再转换成8进制数。
代码:
#include#include char h[100002],b[400002],e[400002];int main(){ int n; scanf("%d",&n); while(n--){ scanf("%s",h); int i,len=0; /*先把16进制化成二进制——从后往前展开 */ for(i=strlen(h)-1;i>=0;i--){ int v; if(h[i]>='0' && h[i]<='9') v=h[i]-'0'; else v=h[i]-'A'+10; for(int j=0;j<4;j++){ b[len++]=v%2+'0'; v/=2; } } b[len]='\0'; int x=0,cnt=1; int l=0; for(i=0;i =0 && e[i]=='0') /*去掉前导0*/ i--; if(i<0) printf("0"); for (;i>=0;i--){ printf("%c",e[i]); } printf("\n"); } return 0;}
转载地址:http://dvrzi.baihongyu.com/