zoukankan      html  css  js  c++  java
  • 整数的N进制字符串表示(c++)

    【问题描述】
    编写函数itob(n,s,b),用于把整数n转换成以b为基的字符串并存储到s中。
    编写程序,使用函数itob(n,s,b)将输入的整数n,转换成字符串s,将s输出。
    转换后的字符串从最高的非零位开始输出。
    如果n为负数,则输出的字符串的第一个字符为’-’。
    b为大于1小于37的任意自然数值。
    当b=2时,输出字符只可能是’0’和’1’;
    当b=16时,输出字符串中可能含有字符为’0’-‘9’,‘a’-‘f’(字母以小写输出)。
    b还可以是其它数值。
    比如输入n=33,b=17,则输出1g。

    【输入形式】
    控制台输入整数n和b,其中n可以为负数。n和b以空格分隔.

    【输出形式】
    控制台输出转化后的字符串s.

    【样例输入】
    5 2

    【样例输出】
    101

    代码:

    #include <iostream>
    using namespace std;
    int itob(int n,char s[],int b);
    
    int main()
    {
        int n, b, m;//m是自己设的一个复数的返回值
        char s[1000];
        cin >> n >> b;
        if( b<=1 || b>=37 ) return 0;//根据题目框定b的范围
        m = itob(n,s,b);//如果函数返回1,则说明n是负数
        if( m==1 ) cout << "-" << s << endl;//负数输出
        else cout << s << endl;
    }
    int itob(int n,char s[],int b)
    {
        int i=0,j,k;
        bool key=0;//专门为负数设置一个开关
        if(n<0) { n=-n; key=1; }//如果为负数,则打开开关,并且取负数的相反值参与运算
        do//这是整道题的核心算法
        {
            j = n%b;
            s[i++] = ( (j <= 9) ? j+'0' : j+'a'-10 );
        }
        while((n/=b) > 0);
        s[i--]='';
        for(k=0;k<i;k++,i--)//倒序
            {
                char temp=s[k];
                s[k]=s[i];
                s[i]=temp;
            }
        return key;
    }
    
    
  • 相关阅读:
    MATLAB读取文件——从非常规文本文件中读取数据
    注意——CAN通信设备控制
    硬件——USB传输速度和物理接口
    STM32F4-浮点DSP库的MDK开发环境的设置
    CRC校验
    蓝牙串口使用心得
    Mysql 层级、执行顺序、执行计划分析
    讲一讲垃圾回收算法
    【转】Java中的新生代、老年代、永久代和各种GC
    工具链接
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626171.html
Copyright © 2011-2022 走看看