PAT程序能力考题——甲级1010(比较任意进制转换的两个数字,是否相等)
来源:互联网 发布:淘宝质量好的男鞋店 编辑:程序博客网 时间:2024/05/29 14:36
题目链接如下:点击打开链接
题目要求大概翻译如下:
从给定的两个数字比较是否相等,其中一个N1给出进制radix(如果tag为1,则是N1,为2,则是N2),检验另一个数字N2(N1)在2—36进制中任意一种情况下是否与N1(N2)相等,如果相等,输出进制,不相等,输出‘impossible’
举例输入:
6 110 1 10
则输出为
2
程序设计如下:
// pat 甲级1010,比较两个任意数字(转化为2--36进制都可)#include <stdio.h>#include <math.h>#include <string.h>char n1[10] = {0};char n2[10] = {0};int tag = 0;int radix = 0;int specRadix = 0;//把特定的数字从原来的进制转化成十进制数unsigned long convertDigitToDecimal( char* rawDigit , int rawRadix ){unsigned long number = 0;int middle = 0;if ( rawRadix < 2 || rawRadix > 36 ){return 0;}// 将字符中的数字信息reverse,方便计算middle = strlen(rawDigit) / 2;for ( int i = 0; i < middle; i++ ){char tmp = rawDigit[ strlen(rawDigit) - i - 1];rawDigit[ strlen(rawDigit) - i - 1 ] = rawDigit[i];rawDigit[i] = tmp;}// 从低位到高位累加结果for ( int i = 0; i < strlen(rawDigit); i++ ){char tmp = rawDigit[i];int newNumber = ( 47 < tmp && tmp < 58 ? tmp - 48 : (tmp - 'a')+ 10 );int expo = (int)pow((float)rawRadix, i);number += expo* newNumber;}return number;}// 比较两个数字int compare( char* n1, char* n2, int tag, int radix ){unsigned long number1 = ( tag == 1 ? convertDigitToDecimal( n1, radix ) : convertDigitToDecimal( n2, radix ) );unsigned long number2 = 0;int minRadix = 0;char* number = ( tag == 1 ? n2 : n1 );//计算出另外这个数应该用的最小进制for ( int k = 0; k < strlen(number); k++ ){char curDigit = number[k];if ( curDigit > 47 && curDigit < 58 ){curDigit = curDigit - 48;}else{curDigit = curDigit - 'a' + 10;}if ( minRadix < curDigit ){minRadix = curDigit;}}// 从可用最小进制遍历到36进制,逐个验证for( int i = ( minRadix < 2 ? 2: minRadix +1 ); i < 37; i++ ){number2 = ( tag == 1 ? convertDigitToDecimal( n2, i ) : convertDigitToDecimal( n1, i ) );if ( number2 == number1 ){specRadix = i;return true;}}return false;}/*** sample input format:* n1 n2 tag radix*/int main(){char* head = NULL, *tail = NULL;char input[100] = {0};printf( "Please input the n1 n2 tag radix:\n");scanf( "%[^\n]", input );tail = head = input;while( *tail != ' ' )tail++;strncpy( n1, head, tail - head );head = ++tail;while( *tail != ' ' )tail++;strncpy( n2, head, tail - head );sscanf( tail, "%d %d", &tag, &radix );if ( compare(n1, n2, tag, radix) ){printf( "%d\n", specRadix );}else{printf("impossible\n");}return 1;}
谢谢大家支持!
1 0
- PAT程序能力考题——甲级1010(比较任意进制转换的两个数字,是否相等)
- PAT程序设计考题——甲级1009(计算两个多项式相乘的积)
- 比较两个数字是否相等
- PAT程序设计考题——甲级1005 数字按位累加(非负数字按位累加和转化成对应英文单词)
- 比较输入的两个字符串是否相等(c++ 11)
- 比较两个 List 的值是否相等
- 比较两个Integer的值是否相等
- 比较两个数字是否相等 杭电2054
- PAT程序设计考题——甲级1004 遍历树节点(计算树每层的叶子节点数目)
- PAT程序设计考题——甲级1006 签到问题(求所有签到人的最早时间和最晚时间)
- PAT程序设计练习——甲级1003(任意两个城市最短距离、Floyd最短路径算法)
- PAT程序设计考题——甲级1007 (最大连续子序列和)
- PAT程序设计考题——甲级1008(Elevator电梯时间计算问题)
- PAT程序设计考题——甲级1007 (最大连续子序列和) C++实现
- PAT程序设计考题——甲级1045 (最长不下降子序列) C++实现
- PAT程序设计考题——甲级1045 (最长公共子序列) C++实现
- PAT程序设计考题——甲级1040 (最长回文串) C++实现
- PAT程序设计考题——甲级1068 (背包问题) C++实现
- android之textview属性介绍
- Java内存区域,内存溢出,内存泄漏
- qtimer类
- 【leetcode】第7题:逆转数字
- JavaBean和Servlet的区别
- PAT程序能力考题——甲级1010(比较任意进制转换的两个数字,是否相等)
- 加_T的原因
- 提示:正弦曲线资料
- Ubuntu run in Raspberry pi 2 之SD 卡镜像篇(ROS开发准备)
- imageView属性介绍
- Nokia 5110 LCD资料
- 项目开发环境搭建手记(5.Jenkins搭建)
- 菜鸟,大牛,教主三者的区别
- 无序数组相邻最大差值java实现