注册 登录
编程论坛 C++教室

路过的大侠们进来帮忙解释一下加粗的那几句话,谢谢了

a632034079 发布于 2010-03-16 15:40, 491 次点击
加粗的那几句话不能理解,帮忙解释下,谢谢了啊

#include <iostream.h>
#include <string.h>

void convto(char *s,int n,int b)
{
    char bit[] = {"0123456789ABCDEF"};
    int len;
    if(n == 0)
    {
        strcpy(s,"");
        return;
    }
    convto(s,n/b,b);
    len = strlen(s);
    s[len] = bit[n%b];
    s[len+1] = '\0';

}

void main()
{
    char s[80];
    int i,base,old;
    cout << "请输入10进制数:";
    cin >> old;
    cout << "请输入转换的进制:";
    cin >> base;
    convto(s,old,base);
    cout << s << endl;
    cin.get();
}
5 回复
#2
cnfarer2010-03-16 17:37
这个函数是将10进制数转换成其他进制数(应该是2~16进制数).这是个递归调用!
void convto(char *s,int n,int b)
{
    char bit[] = {"0123456789ABCDEF"};
    int len;
    if(n == 0)
    {
        strcpy(s,"");
        return;
    }
    convto(s,n/b,b); //递归调用
    len = strlen(s);   //从此以下3行代码,实际上是在n==0以后返回过程中执行
    s[len] = bit[n%b]; //将n除以b的余数以字符形式存入s的一个元素中.
    s[len+1] = '\0';
}
#3
hahayezhe2010-03-16 19:53
    convto(s,n/b,b); 函数传参  而且是本身的函数 所以为递归
    len = strlen(s);    strlen()是一个函数 它的形参是一个char *  是一个检测 字符串数组的长度函数 由于形参为指针所以会在'\0'处结束
    s[len] = bit[n%b];
    s[len+1] = '\0';
我很奇怪 程序运行到convto(s,n/b,b); 直接循环进入函数
当满足if条件时 直接跳出 进入main()主函数
len = strlen(s);
    s[len] = bit[n%b];
    s[len+1] = '\0';这段代码完全不会执行啊

#4
cnfarer2010-03-16 20:30
回复 3楼 hahayezhe
你对递归的理解还不够啊!
#5
haoliliang882010-03-16 23:53
<< 是什么意思
#6
cnfarer2010-03-17 06:18
回复 5楼 haoliliang88
那段关键代码怎么会不执行呢?
1