【問題描述】編寫函數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; }