两道编程题

来源:百度知道 编辑:UC知道 时间:2024/06/28 00:04:36
最好能够给个注释,尽量用浅显的语言编,四天后就要交了,编完了发到我的邮箱里地址是:meistinchen@yahoo.com.cn
多谢了,尽快

实验一:寻找基数(用C语言编)
一、问题描述:
同一个数会由于采用不同的基数而使得其表现的形式完全不一样,在我们的学习中,我们熟悉的基数有10进制、12进制、60进制等。我们编程的任务就是与数的进制有关。
程序中我们会给大家很多数(假设每个数对的数用X和Y表示),程序需要解决的问题就是为X和Y个选择一个最小的基数,以使得这两个数在其所选的技术上是一对相等的数。
例如:12和5这个数对,我们为12选择基数3,为5选择基数6,这样一来12(base3)=5(base6),因为12(base3)和5(base 6)都相当于10进之中的5。
二、输入:
程序的输入是通过文件完成的。
理想中文件的每一行都包含一个数对X和Y,两个数通过一个或多个空格符分割,与X和Y相关联的有效基数数制范围是2~36。X和Y的合理数值表示字符包括0~9和A~Z(表示数值10~35),但是要注意处理不合法的数据表示形式。
文件的最后以行用一个数字0表示输入的结束。
样例输入文件(base.in)
12 5
10 A
12 34
123 456
ab&e 123
1 2
10 2
0
输出:
结果应该存放在一个文件中,该文件中的每一行对应为输入文件中相应的那行数对,输出的格式如下:
样例输出文件(base.out)
12 (base 3)=5 (base 6)
10 (base 10)=A (base 11)
12 (base 17)=34 (base 5)
123 is not equal to 456 in any base 2 to 36
ab&e is illegal number expression

/* 下面是一个控制台输入输出版本 */
#include < stdio.h >
#include < stdlib.h >
#include < string .h >
#include < ctype.h >
int strtoi( const char * str, int base );

int main()
{
int X,Y,base1,base2;
char line[ 100 ],str1[ 100 ],str2[ 100 ], * p, * q;
while ( 1 ){
gets(line);
if ( ! atoi(line)) break ;
/* set str1 */
for (p = line;isspace( * p);p ++ );
for (q = p; * q && ! isspace( * q);q ++ );
memcpy(str1,p,q - p);
str1[q - p] = ' \0 ' ;

/* set str2 */
for (p = q + 1 ;isspace( * p);p ++ );
for (q = p; * q && ! isspace( * q);q ++ );
memcpy(str2,p,q - p);
str2[q - p] = ' \0 ' ;

for (base1 = 2 ;base1 <= 36 ;base1 ++ ){
X =

不会编, 你把