| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1599 人关注过本帖
标题:数制转换 帮找错
只看楼主 加入收藏
vtanjingwly
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-6-11
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
数制转换 帮找错
我们通常使用的都是十进制的数字,但其实在生活中也经常会使用其它进制。

这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如 12 和 5 ,在十进制下它们是不等的,但若 12 使用 3 进制而 5 使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制, 12 和 5 就可以是相等的。

程序的输入是两个数字 M 和 N( 其十进制的值不超过 1000000000) ,它们的进制在 2~36 之间。对于十以下的数字,用 0~9 表示,而十以上的数字,则使用大写的 A~Z 表示。

求出分别在 2~36 哪种进制下 M 和 N 相等。若相等则输出相应的进制,若不等则输出错误信息。当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。信息的格式见测试用例。

12 5↵
 以文本方式显示
1.12 (base 3) = 5 (base 6)↵
我编了一个 无法输出 求指点
#include"stdio.h"
#include"string.h"
int power(int x,int y)
{int s=1;
y=y-1;
while(y-->0)
{s*=x;
}
return s;
}
char* num(char*a )
{int i,j;
char*p;
    while(*a++!='\0')
        if(*a++>='A'&&*a++<='Z')
        *p++=(*a++)-'A'+10;
        else
            *p++=*a++;
        *p++='\0';
        puts(p);
        return p;
}
int deci(int x,char *a)
{int s=0,i=strlen(a);
char*p;
int n;        
p=num(a);
while(*p++!='\0')
{n=power(x,i--);
    s+=(*p++)*n;
}
return s;
}

 int main()
{int i,j,n,flag=1;
int m;
char a[1000],b[1000];
gets(a);
gets(b);
for(i=2;i<=36;i++)
for(j=2;j<=36;j++)
{n=deci(i,a);
m=deci(j,b);
printf("%d",n);
if(m==n){printf("%s(base on %d)=%s(base on %d)\n",a,i,b,j);flag=0;break;}
}
if(flag==1) printf("no");
return 0;}

 
搜索更多相关主题的帖子: 十进制 
2016-06-11 18:21
a1772847173
Rank: 1
等 级:新手上路
帖 子:3
专家分:5
注 册:2016-6-11
收藏
得分:0 
呵呵
2016-06-11 20:07
孤独城堡
Rank: 2
等 级:论坛游民
帖 子:55
专家分:14
注 册:2008-9-27
收藏
得分:0 
输入数组不要用get函数,改用scanf试试
2016-06-12 10:35
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:10 
程序代码:
#include"stdio.h"
#include"string.h"
int power(int x, int y)
{
    int s = 1;
    y = y - 1;
    while (y-->0)
    {
        s *= x;
    }
    return s;
}
char* num(char*a)
{
    int i, j;
    char*p = (char *)malloc(1000);    //局部变量返回时会自动释放,需要申请内存。
    char*c = p;
    while (*a != '\0')
    {
        if (*a >= 'A'&&*a <= 'Z')
            *p = (*a) - 'A' + 10;
        else
            *p = *a;
        a++;
        p++;
    }
    *p = '\0';
    //puts(c);
    return c;
}
int deci(int x, char *a)
{
    int s = 0, i = strlen(a);
    char*p;
    int n;
    p = num(a);
    while (*p != '\0')
    {
        if ((*p - '0') >= x)    //相应进制下的数不能大于该进制
        {
            free(p);
            return 0;
        }
        n = power(x, i--);
        s += (*p-'0')*n;        //计算时要转换成数字
        p++;
    }
    free(p);
    return s;
}

int main()
{
    int i, j, n, flag = 1;
    int m;
    char a[1000], b[1000];
    gets(a);                    //这样输入不确定会不会满足题目要求
    gets(b);
    for (i = 2; i <= 36; i++)
        for (j = 2; j <= 36; j++)
        {
            n = deci(i, a);
            m = deci(j, b);
            //printf("%d", n);
            if ((m == n)&&(m != 0)) { printf("%s(base on %d)=%s(base on %d)\n", a, i, b, j); flag = 0; return 0; }
        }
    if (flag == 1) printf("no");
    return 0;
}
2016-06-12 11:02
vtanjingwly
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-6-11
收藏
得分:0 
回复 4楼 grmmylbs
请问:为什么要申请内存?
2016-06-12 16:40
vtanjingwly
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-6-11
收藏
得分:0 
回复 3楼 孤独城堡
改了也不行 得不出结果啊!
2016-06-12 16:40
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:10 
释放内存有点问题

程序代码:
#include"stdio.h"
#include"string.h"
#include <stdlib.h>
int power(int x, int y)
{
    int s = 1;
    y = y - 1;
    while (y-->0)
    {
        s *= x;
    }
    return s;
}
char* num(char*a)
{
    int i, j;
    char*p = (char *)malloc(1000);    //局部变量返回时会自动释放,需要申请内存。
    char*c = p;
    while (*a != '\0')
    {
        if (*a >= 'A'&&*a <= 'Z')
            *p = (*a) - 'A' + 10;
        else
            *p = *a;
        a++;
        p++;
    }
    *p = '\0';
    //puts(c);
    return c;
}
int deci(int x, char *a)
{
    int s = 0, i = strlen(a);
    char*p,*q;
    int n;
    p = num(a);
    q = p;
    while (*p != '\0')
    {
        if ((*p - '0') >= x)    //相应进制下的数不能大于该进制
        {
            free(q);
            return 0;
        }
        n = power(x, i--);
        s += (*p - '0')*n;        //计算时要转换成数字
        p++;
    }
    free(q);
    return s;
}

int main()
{
    int i, j, n, flag = 1;
    int m;
    char a[1000], b[1000];
    gets(a);                    //这样输入不确定会不会满足题目要求
    gets(b);
    for (i = 2; i <= 36; i++)
        for (j = 2; j <= 36; j++)
        {
            n = deci(i, a);
            m = deci(j, b);
            //printf("%d", n);
            if ((m == n) && (m != 0)) { printf("%s(base on %d)=%s(base on %d)\n", a, i, b, j); flag = 0; return 0; }
        }
    if (flag == 1) printf("no");
    return 0;
}
2016-06-12 16:50
vtanjingwly
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-6-11
收藏
得分:0 
回复 7楼 grmmylbs
while (*a != '\0')
    {
        if (*a >= 'A'&&*a <= 'Z')
            *p = (*a) - 'A' + 10;
        else
            *p = *a;
        a++;
        p++;
    }
    *p = '\0';
不知道*p = '\0';是否必须?
2016-06-12 20:47
快速回复:数制转换 帮找错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.131337 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved