- 论坛徽章:
- 1
|
就想问问这个题目的思想
书上的作业吧?建议自己多写多改多练习,不行了在看看近似的源码。不要上来就看别人的源码。看会了和自己写出来是两回事。2、3比较简单。1稍难点,给你一个10进制和64进制转换的源码,呵呵,也是我们老师前几天培训的作业哦。你看看,模仿写出你题目的答案。
- #include <stdio.h>;
- #include <string.h>;
- #include "myassert.h"
- void myTurn1(char *,char *);
- void myTurn2(char,char *);
- char * IntToStr64(char *,int);
- int Str64ToInt(int *u,char *str);
- int main(int argc,char *argv[]){
- int i,d;
- char string[10]={0},
- *p;
- for ( i = 0; i<70; i++) {
- if ( i%5 == 0 )
- printf("\n");
- d = i;
- p = IntToStr64(string,d);
- printf("%d:%s\t",d,string);
- d = Str64ToInt(&d,string);
- printf("%s:%d\t",string,d);
- }
- printf("\n");
- d = 2147483647;
- p = IntToStr64(string,d);
- printf("%d:%s\t",d,string);
- d = Str64ToInt(&d,string);
- printf("%s:%d\t",string,d);
- d =-1 ;
- p = IntToStr64(string,d);
- printf("%d:%s\t",d,string);
- d = Str64ToInt(&d,string);
- printf("%s:%d\t",string,d);
- p = IntToStr64(string,2147483648ull);
- printf("%lld:%s\t",2147483648ull,string);
- d = Str64ToInt(&d,string);
- printf("%s:%d\t",string,d);
- printf("\n");
- return 0;
- }
- char * IntToStr64(char *str,int u) {
- int i;
- int j;
- char num[7];
- ASSERT(u>;=0);
- i = 0;
- while (u>;=64){
- num[i] = u%64;
- u/=64;
- i++;
- }
- num[i] = u;
- j = 0;
- while ( i>;=0 ) {
- myTurn1(&num[i],&str[j]);
- i--;
- j++;
- }
- return str;
- }
- void myTurn1(char *a,char *b)
- {
- char c1 = *a,
- c2 = *b;
- ASSERT( c1<64 && c1>;=0 );
- if (c1<=9)
- c2 = c1+48;
- else if (c1<=35)
- c2 = c1+55;
- else if (c1<=61)
- c2 = c1+61;
- else if (c1==62)
- c2 = '#';
- else
- c2 = '-';
- *b = c2;
- }
- int Str64ToInt(int *u,char *str){
- char num[7] = {0},
- *p = str;
- int i,
- sum=0,last=1;
- ASSERT(strlen(str)<=6);
- if (strlen(str)==6)
- ASSERT(str[0] == '0' || str[0] == '1');
- i = 0;
- while ( *p != '\0' ) {
- myTurn2(*p,&num[i]);
- i++;
- p++;
- }
- i--;
- while ( i>;=0 ) {
- sum += num[i]*last;
- last *= 64;
- i--;
- }
- *u = sum;
- return sum;
- }
- void myTurn2(char ch,char *p) {
- char c1;
- ASSERT( (ch=='-') || (ch=='#') || ( (ch>;='a') && (ch<='z') ) || ( (ch>;='A') && (ch<='Z') ) || ( (ch>;='0') && (ch<='9') ) );
- if (ch == '-')
- c1 = 63;
- else if (ch == '#')
- c1 = 62;
- else if (ch>;='a')
- c1 = ch - 61;
- else if (ch>;='A')
- c1 = ch - 55;
- else
- c1 = ch - 48;
- *p = c1;
- }
复制代码
呵呵,这个是主要的程序。改的不成样子了,assert函数是自己实现的,在另外的文件里,功能和系统带的assert函数一样。 |
|