【问题描述】编写函数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; }