求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。
标签:inpu BMI product nbsp 之间 output std mem boa
求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。
输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。
可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。
4 123 10
27
用字符串存储和表示不同进制的数。
1 #include <stdio.h> 2 #include <string.h> 3 4 int main(){ 5 int a, b; 6 char s[40]; 7 while(scanf("%d %s %d", &a, s, &b) != EOF){ 8 int len = strlen(s); 9 //将字符串转换成数值!!! 10 for(int i=0; i<len; i++){ 11 if(s[i]>=‘0‘ && s[i]<=‘9‘) s[i] = s[i] - ‘0‘; 12 if(s[i]>=‘a‘ && s[i]<=‘f‘) s[i] = s[i] - ‘a‘ + 10; 13 if(s[i]>=‘A‘ && s[i]<=‘F‘) s[i] = s[i] - ‘A‘ + 10; 14 } 15 int sum=0, product=1; 16 for(int i=len-1; i>=0; i--) { 17 sum = sum + (int)s[i] * product; 18 product = product * a; 19 } 20 int num = 0; 21 //初始化!!! 22 memset(s, 0, sizeof(s)); 23 if(b==10){ 24 printf("%d\n", sum); 25 }else{ 26 //很奇妙的转化方式!!! 27 do{ 28 if(sum%b<10){ 29 s[num++] = sum % b + ‘0‘; 30 }else{ 31 s[num++] = sum % b - 10 + ‘A‘; 32 } 33 sum /= b; 34 }while(sum!=0); 35 for(int i=num-1; i>=0; i--){ 36 printf("%c", s[i]); 37 } 38 printf("\n"); 39 } 40 } 41 return 0; 42 } 43 44 /* 45 //自己写的 46 void outPrintf(int n){ 47 if(n<10){ 48 printf("%d", n); 49 }else{ 50 switch(n){ 51 case 10: 52 printf("A"); 53 break; 54 case 11: 55 printf("B"); 56 break; 57 case 12: 58 printf("C"); 59 break; 60 case 13: 61 printf("D"); 62 break; 63 case 14: 64 printf("E"); 65 break; 66 case 15: 67 printf("F"); 68 break; 69 } 70 } 71 } 72 73 int changeNum(char c){ 74 int num; 75 if(c==‘0‘){ 76 num = 0; 77 }else if(c==‘1‘){ 78 num = 1; 79 }else if(c==‘2‘){ 80 num = 2; 81 }else if(c==‘3‘){ 82 num = 3; 83 }else if(c==‘4‘){ 84 num = 4; 85 }else if(c==‘5‘){ 86 num = 5; 87 }else if(c==‘6‘){ 88 num = 6; 89 }else if(c==‘7‘){ 90 num = 7; 91 }else if(c==‘8‘){ 92 num = 8; 93 }else if(c==‘9‘){ 94 num = 9; 95 }else if(c==‘a‘ || c==‘A‘){ 96 num = 10; 97 }else if(c==‘b‘ || c==‘B‘){ 98 num = 11; 99 }else if(c==‘c‘ || c==‘C‘){ 100 num = 12; 101 }else if(c==‘d‘ || c==‘D‘){ 102 num = 13; 103 }else if(c==‘e‘ || c==‘E‘){ 104 num = 14; 105 }else{ 106 num = 15; 107 } 108 return num; 109 } 110 111 void getNum(char s[], int len, int ans[]){ 112 int num; 113 for(int i=0, j=len-1; i<len; i++, j--){ 114 ans[i] = changeNum(s[j]); 115 } 116 } 117 118 int main(){ 119 int a, b; 120 char s[40]; //n不一定全书0至9之间的数字,可能出现a,A等!故必须用字串存储 121 while(scanf("%d %s %d", &a, s, &b) != EOF){ 122 int ans[40], num; 123 int len = strlen(s); 124 getNum(s, len, ans); 125 unsigned long long int sum=0, product=1; 126 for(int i=0; i<len; i++){ 127 sum = sum + ans[i] * product; 128 product = product * a; 129 } 130 num = 0; 131 do{ 132 ans[num++] = sum % b; 133 sum /= b; 134 }while(sum!=0); 135 for(int i=num-1; i>=0; i--){ 136 outPrintf(ans[i]); 137 } 138 printf("\n"); 139 } 140 return 0; 141 } 142 */
标签:inpu BMI product nbsp 之间 output std mem boa
原文地址:https://www.cnblogs.com/heyour/p/12149879.html