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;
    }
    
    
  • 相关阅读:
    监听刷新
    判断当前日期是否在[startDate, endDate]区间
    精确计算工具类,提供加减乘除的计算
    常用正则表达式
    高并发
    递归案例
    序列化和反序列化
    web安全
    复杂跨域之CorsFilter源码分析
    springMVC访问根路径问题
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626171.html
Copyright © 2011-2022 走看看