算法与程序实践习题解答2(数制转换)

上传人:xt****7 文档编号:94946850 上传时间:2022-05-23 格式:DOC 页数:26 大小:100KB
返回 下载 相关 举报
算法与程序实践习题解答2(数制转换)_第1页
第1页 / 共26页
算法与程序实践习题解答2(数制转换)_第2页
第2页 / 共26页
算法与程序实践习题解答2(数制转换)_第3页
第3页 / 共26页
点击查看更多>>
资源描述
目 录CS21:特殊的四位数1CS22:确定进制3CS23:skew数5CS24:十进制到八进制7CS25:八进制到十进制9CS26:二进制转化为十六进制10CS27:八进制小数(也属于高精度计算)13CS28:二进制数17CS29:回文数(Palindrom Numbers)19CS210:设计计算器(Basically Speaking)21CS211:24算法与程序实践习 题 解 答2数制转换解决数制转换问题时,如果所给的数值不是用十进制表示的,一般用一个字符型数组来存放。数组的每个元素分别存储它的一位数字。然后按位转换求和,得到十进制表示;再把十进制表示转换成所求的数制表示。转换的结果也用一个字符型数组表示,每个元素表示转换结果的一位数字。根据数制表示中相邻位的基数关系,可以把不同的数制分成两类。一类数制表示中,相邻位的基数是等比关系,例如我们熟悉的十进制表示。另一类数制表示中,相邻位的基数是不等比的。例如在时间表示中,从秒到分采用60进进制;从月到年采用12进制。把一个数值从数制B的表示bmbm-1b m-2 . b1 转换成十进制表示dnd n-1d n-2 . d1 比较简单。假设数制B中,第i位的基数为basei(1=i=m),直接把basei与bi 相乘,然后对全部乘积求和。从十进制表示dnd n-1d n-2 . d1 到bmbm-1b m-2 . b1 的转换需要分两种情况考虑:l数制B 中相邻数字的基数是等比关系,即:basei(1=i=m)可以表示成Ci-1 ,其中C是一个常量。将dnd n-1d n-2 . d1 除以C,余数即为b1;将dnd n-1d n-2 . d1 和C 相除的结果再除以C,余数即为b2; ;直至计算出为bm 止。l数制B 中相邻数字的基数不等比。需要先判断dnd n-1d n-2 . d1 在数制B 中需要的位数m,然后从高位到低位依次计算bm、bm-1 、b m-2 、.、b1。CS21:特殊的四位数(来源:POJ 2196 ZOJ 2405程序设计方法及在线实践指导(王衍等)例,P140)问题描述: 找出并输出所有的4位数(十进制数)中具有如下属性的数:四位数字之和等于其十六进制形式各位数字之和,也等于其十二进制形式各位数字之和。例如:十进制数2991,其四位数字之和2+9+9+1 = 21。由于2991 = 1*1728 + 8*144 + 9*12 + 3, 其十二进制形式为1893(12), BAF(16),其各位数字之和等于11+10+15 = 36。因此你的程序要舍去2991这个数据。下一个数2992,其十进制、十二进制、十六进制形式各位数字之和均为22,因此2992符合要求,应该输出来。(只考虑4位数,2992是第一个符合要求的数)输入:本题没有输入。输出:你的程序要求输出2992及其他更大的、满足要求的四位数(要求严格按升序输出),每个数占一行(前后都没有空行),整个输出以换行符结尾。输出中没有空行。输出中的前几行如样例输出所示。样例输入:本题没有输入。样例输出:29922993299429952996299729982999.解题思路:该题在求解时要用到枚举的算法思想,即枚举所有的四位数(1000-9999),判断其是否满足十六进制、十二进制和十进制形式的各位数之和相等。这里要注意进制转换方法。将一个十进制数Num转换到M进制,其方法是:将Num除以M取余数,直到商为0为止,存储得到的余数,先得到的余数为低位,后得到的余数为高位进行排序,余数0不能舍去。由于此题需要得到Num在16、12和10进制下各位的和,所以只要累加其余数即可。参考程序:#include int main()int Num,tmp;for(Num=1000;Num=9999;Num+)int s16=0,s12=0,s10=0;tmp=Num;while(tmp) /求其十六进制的和s16+=tmp%16;tmp/=16;tmp=Num;while(tmp) /求十二进制的和s12+=tmp%12;tmp/=12;if(s16!=s12) continue;tmp=Num;while(tmp)s10+=tmp%10;tmp/=10;if(s16=s10) printf(%dn,Num);return 0;CS22:确定进制(来源: 2972,程序设计导引及在线实践(李文新)例3.1 P98)问题描述:6*9 = 42 对于十进制来说是错误的,但是对于13进制来说是正确的。即, 6(13) * 9(13) = 42(13), 而 42(13) = 4 * 131 + 2 * 130 = 54(10)。 你的任务是写一段程序读入三个整数p、q和r,然后确定一个进制B(2=B=16) 使得 p * q = r。如果 B有很多选择,输出最小的一个。例如:p = 11,q = 11,r = 121。则有 11(3) * 11(3) = 121(3) 因为 11(3) = 1 * 31 + 1 * 30 = 4(10) 和 121(3) = 1 * 32 + 2 * 31 + 1 * 30 = 16(10)。 对于进制10。有 11(10) * 11(10) = 121(10)。这种情况下,应该输出3。如果没有合适的进制,则输出0。输入:输入有T组测试样例。 T在第一行给出。每一组测试样例占一行,包含三个整数p、q、r。p、q、r的所有位都是数字,并且1 = p、q、r = 1,000,000。输出:对于每个测试样例输出一行。该行包含一个整数:即使得p * q = r成立的最小的B。如果没有合适的B,则输出 0。样例输入:36 9 4211 11 1212 2 2样例输出:1330解题思路:此问题很简单。选择一个进制B,按照该进制将被乘数、乘数、乘积分别转换成十进制。然后判断等式是否成立。使得等式成立的最小B就是所求的结果。分别用一个字符型数组存储p、q、r 的各位数字符号。先以字符串的方式读入p、q、r, 然后按不同的进制将它们转换成成十进制数,判断是否相等。参考程序:#include #include long b2ten(char * x,int b)int ret=0;int len=strlen(x);int i;for(i=0;i=b) return -1;ret*=b;ret+=xi-0;return (long)ret;int main()int n,b;char p8,q8,r8;long pb,qb,rb;/用来存储转换为十进制后的结果scanf(%d,&n);while(n-)scanf(%s%s%s,p,q,r);for(b=2;b=16;b+)pb=b2ten(p,b);qb=b2ten(q,b);rb=b2ten(r,b);if(pb=-1 | qb=-1 | rb=-1) continue;if(pb*qb=rb)printf(%dn,b);break;if(b=17) printf(0n);return 0;注意事项:1) 在数制b(2=b=16) 的表示中,每一位上的数字一定都比b小。每读入一组数据后,需要根据其中的数字,判断b 的下限。在参考程序的b2ten 函数中,如果字符串x 中存储的数字比b 大、或者与b 相等,则返回-1,表明:按照数制b,x 中存储的表示形式是非法的,因此b 不可能是所求的值。2) 检查:在未找到合适的b 时,是否输出0。CS23:skew数(来源: 2973,程序设计导引及在线实践(李文新)例3.2 P101)问题描述:在skew binary表示中,第k位的值xk表示xk*(2k+1-1) 。每个位上的可能数字是0或1,最后面一个非零位可以是2,例如, 10120(skew) = 1*(25-1) + 0*(24-1) + 1*(23-1) + 2*(22-1) +0*(21-1) = 31 + 0 + 7 + 6 + 0 = 44. 前十个skew 数是 0、1、2、10、11、12、20、100、101以及102。输入:输入包含一行或多行,每行包含一个整数n。如果n = 0 表示输入结束,否则n 是一个skew 数。输出:对于每一个输入,输出它的十进制表示。转换成十进制后, n 不超过 231-1 = 2 147 483 647。输入样例:1012020000000000000000000000000000010111000输出样例:44214748364632147483647471041110737解题思路1:skew 数的相邻位上,基数之间没有等比关系。计算每一位的基数后,再把一个skew 数转换成十进制表示就很简单。对于长度为k 的skew 数,最后一位数字的基数为2k-1。由于转换成十进制后, n不超过 231-1,因此输入skew 数的最大长度不超过31。用一个整型数组base31,依次存储skew 数最末位、倒数第2 位、.、第31 位的基数值。使用这个数组,把每个skew 数转换成对应的十进制数。base0 = 1 basek = 2k+1 - 1 = 2 * (2k - 1) + 1 = 2 * basek -1 + 1参考程序1:#include #include int main()int i,k,base31,sum;char skew32;base0=1;for(i=1;i31;i+)basei=2*basei-1+1;while(1)scanf(%s,skew);if(strcmp(skew,0)=0)break;sum=0;k=strlen(skew);for(i=0;i strlen(skew);i+)k-;sum+=(skewi-0)*basek;printf(%dn,sum);return 0;解题分析2:很明显,对输入文件中的skew二进制数,不能采用整数形式(int)读入,必须采用字符数组。那么需要定义多长的字符数组呢?题目中提到“输入文件中的skew二进制数最大值对应到十进制数为231-1 = 2147483647”在把skew二进制数转换成十进制时,只需把每位按权值展开求和即可。参考程序2:#include #include #include int main()char str40; /读入的每个skew二进制数while(scanf(%s,str)!=EOF)int len=strlen(str);int num=0; /对应的十进制数if(len=1 & str0=0) break;int weight=2; /每位的权值为weight-1int i;for(i=len-1;i=0;i-)num+=(stri-0)*(weight-1);weight*=2;printf(%dn,num);return 0;CS24:十进制到八进制(来源: 2734,程序设计导引及在线实践(李文新)练习1 P102)问题描述:把一个十进制正整数转化成八进制输入:一行,仅含一个十进制表示的整数a(0 a 65536)输出:一行,a的八进制表示样例输入:9样例输出:11参考程序1:#include int main()int a;int i,len;char str1000;scanf(%d,&a);i=0;while(a)stri+=a%8+0;a/=8;len=i-1;for(i=len;i=0;i-)printf(%c,stri);printf(n);return 0;参考程序2(寿浙威):#include int main() int i, n; while(scanf(%d, &n) !=EOF) int res10; int p = 0; while(n != 0) resp+ = n % 8; n /= 8; for(i = p-1; i = 0; i-) printf(%d, resi); printf(n); return 0; CS25:八进制到十进制(来源: 2735,程序设计导引及在线实践(李文新)练习2 P103)问题描述:把一个八进制正整数转化成十进制输入:一行,仅含一个八进制表示的正整数a,a的十进制表示的范围是(0, 65536)输出:一行,a的十进制表示样例输入:11样例输出:9参考程序1:#include #include int main()int num=0;int len,i;int base;char octnum1000;scanf(%s,octnum);base=1;len=strlen(octnum);for(i=len-1;i=0;i-)num+=(octnumi-0)*base;base*=8;printf(%dn,num);return 0;参考程序2(寿浙威):#include int main() int n; while(scanf(%d, &n) !=EOF) int res = 0; int d = 1; while(n != 0) res += (n % 10) * d; d *= 8; n /= 10; printf(%dn, res); return 0;CS26:二进制转化为十六进制(来源: 2798,程序设计导引及在线实践(李文新)练习3 P103)问题描述:输入一个2进制的数,要求输出该2进制数的16进制表示。在16进制的表示中,A-F表示10-15输入:第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个以0和1组成的字符串,字符串长度至少是1,至多是10000输出:n行,每行输出对应一个输入。样例输入:2100000111样例输出:207解题思路二进制转换为十六进制从低位开始,每4位转换为一位十六进制。最前面剩余的不足4位的补0补到4位,再转换。参考程序1:#include#includeint main()int i,n,dec,len;char bin10001;scanf(%d,&n);while(n-)scanf(%s,bin);len=strlen(bin); /求二进制数的长度dec=4-len%4;if(len%4) /处理头几位,后移dec位,使得变成4的整数倍,前面补0for(i=len;i=0;i-)bini+dec=bini;for(i=0;idec;i+)bini=0;len+=dec;for(i=0;ilen;i+=4)printf(%X,(bini+3-0)+(bini+2-0)*2+(bini+1-0)*4+(bini-0)*8);printf(n);return 0;参考程序2(寿浙威):#include #include #define maxn 10006int main() int i, j, t, tp, p; char strmaxn, str_revmaxn; char resmaxn/4, tmp6, tmp_rev6; while(scanf(%d, &t) !=EOF) while(t-) p = 0; scanf(%s, &str); int len = strlen(str); for(i = len - 1; i = 0; i-) str_revlen - i - 1 = stri; int k = 4; for(i = 0; i len) k = len - i; strncpy(tmp, str_rev + i, k); for(j = k - 1; j = 0; j-) tmp_revk - j -1 = tmpj; sscanf(tmp_rev, %d, &tp); /printf(k = %d tp = %d tmp = %s tmp_rev = %sn, k, tp, tmp, tmp_rev); switch(tp) case 0: resp+ = 0; break; case 1: resp+ = 1; break; case 10: resp+ = 2; break; case 11: resp+ = 3; break; case 100: resp+ = 4; break; case 101: resp+ = 5; break; case 110: resp+ = 6; break; case 111: resp+ = 7; break; case 1000: resp+ = 8; break; case 1001: resp+ = 9; break; case 1010: resp+ = A; break; case 1011: resp+ = B; break; case 1100: resp+ = C; break; case 1101: resp+ = D; break; case 1110: resp+ = E; break; case 1111: resp+ = F; break; default: break; i += 4; for(i = p-1; i = 0; i-) printf(%c, resi); printf(n); return 0; CS27:八进制小数(也属于高精度计算)(来源: 2765,程序设计导引及在线实践(李文新)练习4 P103)问题描述:八进制小数可以用十进制小数精确的表示。比如,八进制里面的0.75等于十进制里面的0.963125 (7/8 + 5/64)。所有小数点后位数为n的八进制小数都可以表示成小数点后位数不多于3n的十进制小数。你的任务是写一个程序,把(0, 1)中的八进制小数转化成十进制小数。输入:输入包括若干八进制小数,每个小数占用一行。每个小数的形式是0.d1d2d3 . dk,这里di是八进制数0.7,而且已知0 k octal) .l d1d2d3 . dk 8 = (d1+(d2+(d3 +( . dk*0.125 .) *0.125)*0.125)*0.125 10 = (d1*103*(k-1)+(d2*103*(k-2)+(d3*103*(k-3)+( . dk*125 .) *125)*125)*125*10-3*k 10l D1D2D3 . Dm 中小数点后最多可以有42 位数字。用一个数组来存储D1D2D3 . Dm, 每个元素存储一位数字。参考程序1:(网上直接粘贴来的)#include#includeint set1550,output50,op50;void init()int i,j,sum=0;memset(set,0,15*50*sizeof(int);set02=1;for(i=1;i15;i+)sum=0;for(j=2;j=8)setij=sum/8;sum%=8;void add(int* output,int*op)int i;for(i=49;i=0;i-)outputi+=opi;if(outputi=10)outputi-=10;outputi-1+;void multi(int n,int m)int i;memset(op,0,50*sizeof(int);for(i=0;in;i+)add(op,setm);int main()init();int i,len,flag;char input20;while(scanf(%s,input)!=EOF)memset(output,0,50*sizeof(int);len=strlen(input);for(i=2;i=0;i-)if(outputi)break;flag=i;printf(%s 8 = 0.,input);for(i=3;i=flag;i+)printf(%d,outputi);printf( 10n);return 0;参考程序2(寿浙威):#include #include #define maxn 100;int main() int i; char str20, res60; while(scanf(%s, str) !=EOF) double exp = 1; double sum = 0.0; for(i = 2; stri; i+) exp *= 8; sum += (stri - 48) / exp; int len = strlen(str) - 2; int tmp; exp = 10; /printf(%lfn, sum); printf(%s 8 = 0., str); for(i = 0; ilen*3; i+) sum *= exp; tmp = (int)sum; sum -= tmp; resi = tmp + 0; /printf(%c, resi); /printf(n); int k = len*3; while(!(resi - 0) k-; for(i = 0; ik; i+) printf(%c, resi); printf( 10n); return 0;解题分析2:八进制小数转换成十进制小数,其原理本来是按权值展开,小数点后第1位的权值为8-1=0.125,第2位的权值为8-2=0.015625.因此0.758=7*0.125+5*0.015625=0.953125。但在本题中,如果按照这种思路去求解,不容易实现。更好的方法是转换成除法运算,小数点后第1位的权值为8-1,相当于除以8;第2位的权值为8-2,相当于除以两次8,。具体过程为:循环除以8,即从八进制小数的最后一位开始除以8,把得到的结果加到前一位,在除以8,Dm,则循环除以8的公式为:Dm=(d1+(d2+(d3+(dn-1+dn/8)/8)/8)/8)/8例如,对八进制小数0.1238=(1+(2+3/8)/8)/8.具体过程为:注意得到的十进制小数都不保留前面的0及小数点。(1)先读入最后一位num=3,按照除法运算规则进行除8运算,不足的就补0,相当于乘以10,直到余数为0。这样得到结果为375,实际上表示的是0.375,即0.38对应的十进制小数。(2)接下来读入前一位num=2,这时要求的是2.375/8,转换成求2375/8,得到的结果为296875,实际上是0.296875,即0.238对应的十进制小数。反复进行下去,直到求完所有的位数。参考程序3:#include #include const int MAX_LENGTH=20;int main()char srcMAX_LENGTH; /读入来的八进制小数(字符形式)int i,j;/freopen(in.txt,r,stdin);while(scanf(%s,src)!=EOF)char destMAX_LENGTH*4=0; /存放转化后的十进制数(无0.)int num; /读取处理的每个八进制位(整数形式)int index=0; /前一个八进制位除以8后dest数组中的位数int len=0; /当前这个八进制位除以8后dest数组中的位数int temp; /当前这个八进制位与前一位运算结果的每一位组合得到的值for(i=strlen(src)-1;i1;i-) /刨掉最前面的0和小数点.num=srci-0; /取第i位上的八进制数字for(j=0;jindex;j+) /d1dn-1的处理temp=num*10+destj-0;destj=temp/8+0;num=temp%8;while(num) /d1dn的处理(余数的处理,补0再除直到商为0为止)num*=10;destlen+=num/8+0;num%=8;index=len;destlen=0;printf(%s 8 = 0.%s 10n,src,dest);return 0;CS28:二进制数(来源:ZOJ 1383,程序设计方法及在线实践指导(王衍等) P142)问题描述:给定一个正整数n,要求输出对应的二进制数中所有数码“1”的位置。注意最低位为第0位。例如13的二进制形式为1101,因此数码1的位置为:0,2,3.输入:输入文件中的第1行为一个正整数d,表示输入文件中测试数据的个数,1=d=10,接下来有d个测试数据。每个测试数据占一行,只有一个整数n,1=n=106。输出:输出包括d行,即对输入文件中的每个测试数据,输出一行。第i行,1=i=d,以升序的顺序输出第i个测试数据中的整数的二进制形式中所有数码1的位置,位置之间有1个空格,最后一个位置后面没有空格。样例输入:213127样例输出:0 2 30 1 2 3 4 5 6提示:(1) 对输入的整数n,依次用2去整除,用变量pos充当计数器(代表二进制的位),如果得到的余数为1,则输出pos,否则不输出;pos的初值为0,每次将n除以2后,pos自增1.(2) 题目要求两个位置之间有1个空格,最后一个位置之后没有空格,解决方法是在第1个位置之前不输出空格,然后再接下来的所有数码“1”的位置之前输出1个空格。参考程序:#include int main()int d,n;int pos; int flag;/freopen(in.txt,r,stdin);scanf(%d,&d);while(d-)scanf(%d,&n);pos=0;flag=0;while(n)if(n%2=1)if(flag=0)printf(%d,pos);flag=1;elseprintf( %d,pos);n/=2;pos+;printf(n);return 0;CS29:回文数(Palindrom Numbers)(来源:ZOJ 1078,程序设计方法及在线实践指导(王衍等) P234)问题描述:我们称一个数是一个回文数,当且仅当它从左往右读和从右往左读起来都是一样的。比如75457就是回文数。当然,这种性质取决于这个数是在什么进制下,比如17在十进制下不是一个回文数,但在二进制下则是一个回文数(10001)。这道题的目的是验证给定的一组数分别在2进制16进制下是否是回文数。输入:输入文件包含了若干个整数,每个整数n都是在十进制下给出的,每个整数占一行,0n50000。输入文件以0表示结束。输出:当该整数在某些进制下是回文数,则输出“Number i is palindrom in basis”,分别列出这些基数,其中i是给定的整数。如果该整数在216进制下都不是回文数,则输出“Number i is not palindrom”。样例输入:17190样例输出:Number 17 is palindrom in basis 2 4 16Number 19 is not a palindrom解题分析:对读入的每个十进制数number,依次判读number在216进制下是否为回文数并输出如果都不是则输出“Number i is not palindrom”。在判读十进制数number在basis进制下是否为回文数时,首先要将十进制数number转换为basis进制,即将number除以basis取余数。存储余数时要注意以下两个问题:(1)十进制以上的进制中的数码除了09外,还有字母,例如十六进制的数码为09,以及A、B、C、D、E、F。那么是否需要将得到的余数以字符形式存放呢?(2)进制转换时,得到的余数排列顺序是:先得到的余数位于低位,后得到的余数位于高位,是否有必要严格按照这个顺序(即与余数产生顺序相反的顺序)存储得到的余数?对于第一个问题,答案是不需要,更方便的做法是在取余数时把得到的余数以整数形式存放到一个整型数组里。例如,十进制的2847,在15进制下得到的余数为12,9和12.其中第1个和第3个余数在15进制下为字符C,但我们并不需要得到真正的15进制数,只需要判断各位数码中的某些位是否相等。对于第二个问题,答案也是不需要的。因为如果一个数是回文数,则各位逆序后仍然是回文数,因此在取余时可以按先后顺序存放到整型数组里,然后判断数组中的数是否构成回文数。参考程序:#include /判读number在basis进制下是否为回文数,如果是,返回truebool IsPalindrom(int number,int basis)/number最大为50000,转换成二进制不超过16位int a16; /存储将十进制数number转换成basis进制数得到的每一位int i=0,j=0,k; /循环变量int Len; /转换到basis进制后数的位数while(number)ai+=number%basis;number/=basis;Len=i;k=Len/2;while(jk) /判断转换后的数是否为回文数if(aj != aLen-1-j) return false;j+;return true;int main()int number; /读入的每个数bool IsPal; /如果IsPal为false,则number在216进制下都不是回文数int i;while(scanf(%d,&number)if(!number) break; /0结束IsPal=false;for(i=2;i=16;i+)if(IsPalindrom(number,i)if(!IsPal)IsPal=true;printf(Number %d is palindrom in basis,number);printf( %d,i);if(!IsPal) printf(Number %d is not a palindrom,number);printf(n);return 0;CS210:设计计算器(Basically Speaking)(来源:POJ 1546 ZOJ 1334,程序设计方法及在线实践指导(王衍等)练习 P241)问题描述:某个公司最近邀请你设计一个计算器。作为计算机科学家,你建议将这个计算器设计得灵巧一点,使得它能在各种进制之间进行转换。公司认为这是一个很好的想法,并要求你拿出实现进制转换的算法原型。公司经理告诉你,该计算器有以下特征:(1)它的显示器有7位;(2)它的按键除了数字0到9外,还有大写字母A到F;(3)它支持216进制。输入:输入文件中的每一行要实现一次进制转换。每一行有3个数,第1个数是A进制下的一个整数,第2个数就是A,第3个数是B,要实现的是将第1个数从A进制转换到B进制下。这3个数的两边可能有一个或多个空格。输入数据一直到文件结尾。输出:实现输入文件中的每次进制转换,转换后的数右对齐到7位显示器。如果转换后的数的位数太多,在7位显示器中显示不下,则输出“ERROR”,也是右对齐到7位显示器。样例输入:1111000 2 101111000 2 162102101 3 102102101 3 15 12312 4 2 1A 15 21234567 10 16 ABCD 16 15样例输出:120 78 1765 7CA ERROR 11001 12D687 D071参考程序(zzg):#include #include long b2ten(char * x,int b);int main()char numsrc10,numdest10; /用来存储读入的数和转换后的数char temp10;char error10=ERROR;long num;int src,dest; /转换前的进制和转换后的进制int i,j;/freopen(in.txt,r,stdin);while(scanf(%s%d%d,numsrc,&src,&dest)!=EOF)/先把src进制的数转换为10进制数,存放到temp中num=b2ten(numsrc,src);if(dest=10)if(num9999999)printf(%7sn,error);elseprintf(%7dn,num);elsei=0;while(num)if(num%dest7)printf(%7sn,error);else /逆序输出j=0;for(i=strlen(numdest)-1;i=0;i-)tempj+=numdesti;tempj=0;printf(%7sn,temp);return 0;/把x中存放的数转换为b进制下的数返回long b2ten(char * x,int b)int ret=0;int len=strlen(x);int i;for(i=0;ilen;i+)ret*=b;if(xi-0)=9)ret+=xi-0;elseswitch(xi)case A:ret+=10;break;case B:ret+=11;break;case C:ret+=12;break;case D:ret+=13;break;case E:ret+=14;break;case F:ret+=15;break;return (long)ret;CS211:(来源:POJ 1220 ZOJ 1352,程序设计方法及在线实践指导(王衍等) P242)问题描述:输入:输出:样例输入:862 2 abcdefghiz16 35 3A0C92075C0DBF3B8ACBC5F96CE3F0AD235 23 333YMHOUE8JPLT7OX6K9FYCQ8A23 49 946B9AA02MI37E3D3MMJ4G7BL2F0549 61 1VbDkSIMJL3JjRgAdlUfcaWj61 5 dl9MDSW
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!