c0502_整数的N进制字符串表示

【问题描述】编写函数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,则输出33的17进制值为"1g"。
【输入形式】控制台输入整数n和b,其中n能够为负数。n和b以空格分隔.
【输出形式】控制台输出转化后的字符串s.
【样例输入】5 2
【样例输出】101
【样例说明】5的二进制就是101数组

--------------------------函数

我的代码:spa

#include <stdio.h>

void itob(int n, char *s, int b){
    int i=0,flag=0,k;
    if(n<0){
        flag = 1;
        n = 0-n;
    }
    do{
        s[i++] = n%b;
    }while((n/=b)!=0);
    for(k=i-1;k>=0;k--){
        if(s[k]>=0 && s[k]<=9)
            s[k] = s[k] + '0';
        else
            s[k] = s[k] - 10 + 'a';
    }
    if(flag==1)
        printf("-");
    for(k=i-1;k>=0;k--)
        printf("%c",s[k]);
    printf("\n");
}

int main(){
    int n,b;
    char s[100];
    scanf("%d %d",&n,&b);
    itob(n,s,b);
    getchar();
    return 0;    
}

标答:code

#include <stdio.h>

int atob(int n, char *s, int b);

#define NEGATIVE 0
#define POSITIVE 1

main()
{
    int n, b;
    char s[32];
    scanf("%d %d", &n, &b);
    atob(n, s, b);
    printf("%s", s);
}

int atob(int n, char *s, int b)
{
    int i = 0, j = 0, t = 0, state = POSITIVE;
    if (n < 0) {
        n = 0 - n;
        state = NEGATIVE;
    }
    do {
        s[i++] = n % b + '0';
        if (s[i-1] > '9') {
            s[i-1] += 'a' - '9' - 1;
        }
    } while ((n /= b) > 0);

    if (state == NEGATIVE) {
        s[i++] = '-';
    }
    s[i] = '\0';

    for (i -= 1; i > j; i--, j++) {
        t = s[i];
        s[i] = s[j];
        s[j] = t;
    }
    return 0;
}

---------------------blog

一、关于函数中的形参为数组的问题:字符串

数组定义:char s[32];get

函数定义:int atob(int n, char *s, int b){...;...;}it

函数引用:atob(n, s, b);io

打印数组:printf("%s", s);//s[]数组必须以'\0'做为结束标志。(所以须要手动赋值)class

二、将数组中的值逆序

    for (i -= 1; i > j; i--, j++) {
        t = s[i];
        s[i] = s[j];
        s[j] = t;
    }
相关文章
相关标签/搜索