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;
    }
相關文章
相關標籤/搜索