水题~

来源:互联网 发布:产生1 n随机数 js 编辑:程序博客网 时间:2024/04/30 02:36
/*基础练习 十六进制转八进制  时间限制:1.0s   内存限制:512.0MB      问题描述  给定n个十六进制正整数,输出它们对应的八进制数。输入格式  输入的第一行为一个正整数n (1<=n<=10)。  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出格式  输出n行,每行为输入对应的八进制正整数。注意  输入的十六进制数不会有前导0,比如012A。  输出的八进制数也不能有前导0。样例输入239123ABC样例输出714435274提示  先将十六进制数转换成某进制数,再由某进制数转换成八进制。*/#include<stdio.h>#include<string.h>char s[100010];int a[100010], c[400010], b[400010];//注意数组的大小~int main(){int i, j, k, n;scanf("%d", &n);while(n--){scanf("%s", s); int l = strlen(s);for(i = 0; i < l; i++)//str  ~ num{if(s[i] >= 48 && s[i] <= 57)a[i] = s[i] - 48;elsea[i] = s[i] - 55;//CHR}for(i = 0; i < l; i++)//16~2{b[i*4+3] = a[i]&1;a[i] >>= 1;b[i*4+2] = a[i]&1;a[i] >>= 1;b[i*4+1] = a[i]&1;a[i] >>= 1;b[i*4] = a[i]&1;}j = 0;i = 4*l-1;for( ; i >= 0; i -= 3)//2 ~ 8{if(i-2 >= 0)c[j++] = b[i] + b[i-1]*2 + b[i-2]*4;else break;}if(i == 1)c[j++] = b[i] + b[i-1]*2;else if(i == 0)c[j++] = b[i];for(i = j-1; i >= 0 ; i--){if(c[i] != 0){for(k = i; k  >= 0; k--)printf("%d", c[k]);break;}}printf("\n");}return 0;
0 0
原创粉丝点击