emmmmmmzh
2017-12-07 07:48
采纳率: 0%
浏览 850

初学C++,求助一道编程题。要按照要求来做,实在没什么想法,求前辈指点(大一学生,初学菜鸟)

图片说明
图片说明
图片说明

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • emmmmmmzh 2017-12-07 07:52

    关键不能改动主函数让我难以解决

    评论
    解决 无用
    打赏 举报
  • 小優YoU 2017-12-07 08:40
    void itostr(int num, char str[]) {
        const int MAX_LEN = 20;
        char tmp[MAX_LEN] = { '\0' };
    
      // 数字转字符
        int i = 0;
        while(num >= 0) {
            tmp[i++] = num % 10 + '0';
            num /= 10;
        }
    
        // 反转字符串
        for(int j = 0, i = i - 1; i >=0; j++, i--) {
            str[j] = tmp[i];
        }
    }
    
    

    大概就是这样,
    十进制整数 % 10 取个位, / 10 取高位,知道这个就不难做了

    评论
    解决 无用
    打赏 举报
  • zhuxingshuai 2017-12-07 08:40

    #include

    using std::cin;
    using std::cout;
    using std::endl;

    void itostr(int num, char str[]);

    int main()
    {
    const int SIZE = 20;
    int t, num;
    char str[SIZE];

    cin >> t;
    while (t--)
    {
        cin >> num;
        itostr(num, str);
        cout << str << endl;
    }
    
    
    return 0;
    

    }

    void itostr(int num, char str[])
    {
    _itoa_s(num, str, 40, 10);
    }

    评论
    解决 无用
    打赏 举报
  • 小優YoU 2017-12-07 08:47

    前面代码有错误,我改了一下

     void itostr(int num, char str[]) {
        const int MAX_LEN = 20;
        char tmp[MAX_LEN] = { '\0' };
    
        int i = 0;
        while(num > 0) {
            tmp[i++] = (num % 10) + '0';  // 数字转字符
            num /= 10;
        }
    
      // 反转字符串
        for(int j = 0, k = i - 1; k >=0; j++, k--) {
            str[j] = tmp[k];
        }
        str[i] = '\0';
    }
    

    大概就是这样,
    十进制整数 % 10 取个位, / 10 取高位,知道这个就不难做了

    评论
    解决 无用
    打赏 举报
  • 两水先木示 2017-12-11 07:24

    void itostr(int num,char str[])
    {
    //计算sum的位数 注意:当sum是3位数的时候i=2
    int n=sum;
    for(int i=19;n!=0;i--)
    {
    n/=10;
    }
    i++;
    //num大于等于2位数
    if(i<=18)
    {
    str[i]=num%10+'0';
    itostr(num/10,str);
    }
    else //sum=1位时str[19]=num;
    {
    str[i]=num;
    for(int j=
    }
    }
    我想不下去了,因为有一点无法弄好,那就是无法确认这个num的长度,思想是从低位数到高位数截取,每次递归截取一个,然后num消去最低位继续递归,
    直到num是1位数的时候 就结束,在这个过程中一直给str[]数组赋值,每次进入递归的时候都要重新判断num的位数,用位数确认数组下标进行str[]赋值操作,
    问题来了,那就是无法确认到底有多长这个数组,因为不可修改源代码,你想想怎么才能在递归函数中加一个标志字符串结束的标志位。。

    评论
    解决 无用
    打赏 举报
  • 两水先木示 2017-12-11 07:27

    void itostr(int num,char str[]) 例如 123 str[17]=123%10=3 str[18]=12%10=2; str[19]=1%10=1; 最终i绝对会等于19,但是你不知道之前i最小是多少的问题~
    {
    int n=sum;
    for(int i=19;n!=0;i--)
    {
    n/=10;
    }
    i++;
    //num大于等于2位数
    if(i<=18)
    {
    str[i]=num%10+'0';
    itostr(num/10,str);
    }
    else //sum=1位时str[19]=num;
    {
    str[i]=num;
    for(int j=
    }
    }

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题