资源描述
数制转换(选作)这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如 12 和 5 ,在十进制下它们是不等的,但若 12 使用 3 进制而 5 使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制, 12 和 5 就可以是相等的。 程序的输入是两个数字 M 和 N( 其十进制的值不超过 1000000000) ,它们的进制在 236 之间。对于十以下的数字,用 09 表示,而十以上的数字,则使用大写的 AZ 表示。 求出分别在 236 哪种进制下 M 和 N 相等。若相等则输出相应的进制,若不等则输出错误信息。当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。信息的格式见测试用例。程序: #includeint main() long int pm=0,pn=0,s=0,t=0,w=1,e=1,p=0,q=0;int a30,b30;char m30,n30;int i,j,g,k,max1=0,max2=0,flag=0;scanf(%s%s,m,n);for(i=0;mi!=0;i+)if(mi=A&mi=0&mi=9)ai=mi-48;max1=max1(ai+1)?(ai+1):max1;max1=max1=A&nj=0&nj=9)bj=nj-48;max2=max2(bj+1)?(bj+1):max2;max2=max22?2:max2;pn=j;for(i=max1,j=max2;i=36&j=0;g-) p+=ag*w;w=w*i;for(k=pn-1;k=0;k-) q+=bk*e;e=e*j;if(pq) j+; else flag=1; printf(%s (base %d) = %s (base %d)n,m,i,n,j); break; if(flag=0) printf(%s is not equal to %s in any base 2.36n,m,n);return 0;
展开阅读全文