标题:求进制数算法上的问题
只看楼主
Eahonxu
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2016-7-13
结帖率:96.15%
已结贴  问题点数:20 回复次数:6 
求进制数算法上的问题
题目如下所示,我找到网上的答案跟自己的对照,调用函数里的算法我有些不解的地方,比方像,
    n1 = x /y ;
    n2 = x %y;
    if(n1 < y)
        putchar('0' + n1);
这个步骤,我不明白为什么要计算 n1 = x / y;并且用if(n1 < y)是个什么含义我也不太理解。

第九题:为了使程序清单9.8中的函数to_binary()更一般化,可以在心的函数to_base_n()中使用第二个参数,且该参数的范围从2到10。然后,这个新函数输出第一个参数在第二个参数规定的进制数下的数值结果。例如,to_base_n(129,8)的输出时201,也就是129的八进制数值。最后在一个完整的程序中对该函数进行测试。
解:
代码如下:
#include <stdio.h>
void to_base_n(int x,int y);
int main(void)
{
    int x,y;


    printf("Input a int for number and a int for like binary:\n");
    scanf("%d %d",&x,&y);
    to_base_n(x,y);
    printf("\n");
    return 0;
}
void to_base_n(int x,int y)
{
    int n1,n2;


    n1 = x /y ;
    n2 = x %y;
    if(n1 < y)
        putchar('0' + n1);
    else
        to_base_n(n1,y);
    putchar('0' + n2);
}
搜索更多相关主题的帖子: 八进制 网上 
2016-09-04 02:22
Eahonxu
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2016-7-13
得分:0 
贴上自己的代码:
#include <stdio.h>
void to_base_n(unsigned m, unsigned n);
int main(void)
{
    unsigned long number;
    unsigned n;
    printf("enter an integer (q to quit): \n");
    while(scanf("%lu%u", &number, &n) == 2)
    {
        printf("Binary equivalent: ");
        to_base_n(number, n);
        putchar('\n');
        printf("Enter an integer(q to quit: \n");
    }
    printf("Done.\n");
   
    return 0;
}

void to_base_n(unsigned m, unsigned n)
{
    int r;
   
    if((n>=2)&&(n<=10))
    {
        r = m % n;
        if(m >= 2)
            to_base_n(m/n, n);
        putchar('0' + r);
    }
    return;
   
}
2016-09-04 02:22
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:10 
你自己写的函数里也有计算n1=x/y,前者是单独写出来,你写的在调用函数的参数里,不一样的只是变量名。
n1 < y只有当n1比规定的进制小时,说明已经不能再进位。
m>=2 作为判断也是类似的操作,但是不足的一点是首位有时有0(当m是n的两倍时),有时没0。改成m>2输出结果更好看一些

2016-09-04 07:35
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:10 
把m>=2改为m>=n首位就没零了。这个算法不错,学习了。
2016-09-04 09:05
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
得分:0 
回复 3楼 linlulu001
版主大神你好 下面那行加红色的代码是什么意思?
if((n>=2)&&(n<=10))
     {
         r = m % n;
         if(m >= 2)
             to_base_n(m/n, n);
         putchar('0' + r);
     }
     return;
     
 }

早知做人那么辛苦!  当初不应该下凡
2016-09-18 23:12
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
去看看ASCII字符‘0’-'9'
putchar输出字符

[此贴子已经被作者于2016-9-18 23:51编辑过]

2016-09-18 23:38
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
得分:0 
回复 6楼 linlulu001
谢谢,我知道了 很感谢你的解答!

早知做人那么辛苦!  当初不应该下凡
2016-09-19 23:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-468475-1-1.html




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

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