| @@ -0,0 +1,376 @@ | ||
| #include<stdio.h> | ||
| #include<stdlib.h> | ||
| #include<string.h> | ||
| #define filename "data.txt" | ||
|
|
||
| struct User{ | ||
| int id,exist; | ||
| char name[100]; | ||
| int sex; | ||
| char phone[12]; | ||
| char email[100]; | ||
| char address[100]; | ||
| }; | ||
|
|
||
| struct List{ | ||
| int list[10000]; | ||
| int cur; | ||
| }; | ||
|
|
||
| struct Lib{ | ||
| struct User users[10000]; | ||
| int cursor; | ||
| }; | ||
|
|
||
| struct Lib *init_lib(){ | ||
| struct Lib *lib=(struct Lib*)calloc(1,sizeof(struct Lib)); | ||
| for(int i=0;i<10000;i++){ | ||
| lib->users[i].id=i; | ||
| lib->users[i].exist=0; | ||
| } | ||
| return lib; | ||
| } | ||
|
|
||
| int init_user(struct Lib *lib){ | ||
| for(int i=0;i<10000;i++){ | ||
| if(lib->users[i].exist=0){ | ||
| lib->cursor=i; | ||
| lib->users[i].id=i; | ||
| lib->users[i].exist=1; | ||
| break; | ||
| } | ||
| } | ||
| return lib->cursor; | ||
| } | ||
|
|
||
| void print_user(struct Lib *lib){ | ||
| struct User user=lib->users[lib->cursor]; | ||
| if(user.exist==0){ | ||
| printf("User does not exist!\n"); | ||
| }else{ | ||
| printf("------------------------------------------------\n"); | ||
| printf("ID:%d\n\tName:%s\n\tSex:%s\n\tPhone numser:%s\n\te-mail:%s\n\tAddress:%s\n\t",user.id,user.name,user.sex==1?"boy":"girl",user.phone,user.email,user.address); | ||
| printf("------------------------------------------------\n"); | ||
| } | ||
| } | ||
|
|
||
| void print_by_list(struct Lib *lib,struct List *list){ | ||
| for(int i=0;i<list->cur;i++){ | ||
| lib->cursor=list->list[i]; | ||
| print_user(lib); | ||
| printf("\n\n"); | ||
| } | ||
| } | ||
|
|
||
| void print_all(struct Lib *lib){ | ||
| for(int i=0;i<10000;i++){ | ||
| if(lib->users[i].exist==0){continue;} | ||
| lib->cursor=i; | ||
| print_user(lib); | ||
| } | ||
| } | ||
|
|
||
| void user_add_name(struct Lib *lib,char *name){ | ||
| int len=strlen(name); | ||
| int i=0; | ||
| for(i=0;i<len;i++){ | ||
| lib->users[lib->cursor].name[i]=name[i]; | ||
| } lib->users[lib->cursor].name[i]='\0'; | ||
| } | ||
|
|
||
| void user_add_sex(struct Lib *lib,int sex){ | ||
| lib->users[lib->cursor].sex=sex; | ||
| } | ||
|
|
||
| void user_add_phone(struct Lib *lib,char *phone){ | ||
| for(int i=0;i<12;i++){ | ||
| lib->users[lib->cursor].phone[i]=phone[i]; | ||
| } | ||
| } | ||
|
|
||
| void user_add_email(struct Lib *lib,char *email){ | ||
| int len=strlen(email); | ||
| for(int i=0;i<len+1;i++){ | ||
| lib->users[lib->cursor].email[i]=email[i]; | ||
| } | ||
| } | ||
|
|
||
| void user_add_address(struct Lib *lib,char *address){ | ||
| int len=strlen(address); | ||
| for(int i=0;i<len+1;i++){ | ||
| lib->users[lib->cursor].address[i]=address[i]; | ||
| } | ||
| } | ||
|
|
||
| void add_user(struct Lib *lib){ | ||
| init_user(lib); | ||
| while(1){ | ||
| printf("Please input your name....\n"); | ||
| char name[100]; | ||
| scanf("%s",name); | ||
| user_add_name(lib,name); | ||
| printf("Are you a boy or a gril?(boy:1,gril:0)\n"); | ||
| int sex; | ||
| scanf("%d",&sex); | ||
| user_add_sex(lib,sex); | ||
| printf("What is your phone number?\n"); | ||
| char phone[100]; | ||
| while(1){ | ||
| scanf("%s",phone); | ||
| if(strlen(phone)==11){ | ||
| break; | ||
| }else{ | ||
| printf("Wrong formate!\ntell me again!\n"); | ||
| } | ||
| } | ||
| user_add_phone(lib,phone); | ||
| printf("What is your email?\n"); | ||
| char email[100]; | ||
| scanf("%s",email); | ||
| user_add_email(lib,email); | ||
| printf("What is your address?\n"); | ||
| char address[100]; | ||
| scanf("%s",address); | ||
| user_add_address(lib,address); | ||
| printf("So,is your imformation Right?(yes:1,no:0)\n"); | ||
| print_user(lib); | ||
| int yon; | ||
| scanf("%d",&yon); | ||
| if(yon==1){break;} | ||
| } | ||
| } | ||
|
|
||
| struct List *search_name(struct Lib *lib,char *name){ | ||
| struct List *list=(struct List*)calloc(1,sizeof(struct List)); | ||
| list->cur=0; | ||
| int len=strlen(name); | ||
| for(int i=0;i<10000;i++){ | ||
| int tig=1; | ||
| for(int digit=0;digit<len&&tig==1;digit++){ | ||
| if(lib->users[i].name[digit]!=name[digit]&&lib->users[i].exist==1){ | ||
| tig=0; | ||
| } | ||
| } | ||
| if(tig==1){ | ||
| list->list[list->cur]=i; | ||
| list->cur+=1; | ||
| } | ||
| } | ||
| return list; | ||
| } | ||
|
|
||
| struct List *search_sex(struct Lib *lib,int sex){ | ||
| struct List *list=(struct List*)calloc(1,sizeof(struct List)); | ||
| list->cur=0; | ||
| for(int i=0;i<10000;i++){ | ||
| if(lib->users[i].sex==sex&&lib->users[i].exist==1){ | ||
| list->list[list->cur]=i; | ||
| list->cur+=1; | ||
| } | ||
| } | ||
| return list; | ||
| } | ||
|
|
||
| struct List *search_phone(struct Lib *lib,char *phone){ | ||
| struct List *list=(struct List*)calloc(1,sizeof(struct List)); | ||
| list->cur=0; | ||
| for(int i=0;i<10000;i++){ | ||
| int tig=1; | ||
| for(int digit=0;digit<11&&tig==1;digit++){ | ||
| if(lib->users[i].phone[digit]!=phone[digit]&&lib->users[i].exist==1){ | ||
| tig=0; | ||
| } | ||
| } | ||
| if(tig==1){ | ||
| list->list[list->cur]=i; | ||
| list->cur+=1; | ||
| } | ||
| } | ||
| return list; | ||
| } | ||
|
|
||
| struct List *search_email(struct Lib *lib,char *email){ | ||
| struct List *list=(struct List*)calloc(1,sizeof(struct List)); | ||
| list->cur=0; | ||
| int len=strlen(email); | ||
| for(int i=0;i<10000;i++){ | ||
| int tig=1; | ||
| for(int digit=0;digit<len&&tig==1;digit++){ | ||
| if(lib->users[i].email[digit]!=email[digit]&&lib->users[i].exist==1){ | ||
| tig=0; | ||
| } | ||
| } | ||
| if(tig==1){ | ||
| list->list[list->cur]=i; | ||
| list->cur+=1; | ||
| } | ||
| } | ||
| return list; | ||
| } | ||
|
|
||
| struct List *search_address(struct Lib *lib,char *address){ | ||
| struct List *list=(struct List*)calloc(1,sizeof(struct List)); | ||
| list->cur=0; | ||
| int len=strlen(address); | ||
| for(int i=0;i<10000;i++){ | ||
| int tig=1; | ||
| for(int digit=0;digit<len&&tig==1;digit++){ | ||
| if(lib->users[i].address[digit]!=address[digit]&&lib->users[i].exist==1){ | ||
| tig=0; | ||
| } | ||
| } | ||
| if(tig==1){ | ||
| list->list[list->cur]=i; | ||
| list->cur+=1; | ||
| } | ||
| } | ||
| return list; | ||
| } | ||
|
|
||
| void delete_user(struct Lib *lib){ | ||
| lib->users[lib->cursor].exist=0; | ||
| } | ||
|
|
||
| void delete_by_list(struct Lib *lib,struct List *list){ | ||
| for(int i=0;i<list->cur;i++){ | ||
| lib->cursor=list->list[i]; | ||
| delete_user(lib); | ||
| } | ||
| } | ||
|
|
||
| void lib_load(struct Lib *lib){ | ||
| FILE *file; | ||
| char line[200]; | ||
| while(1){ | ||
| if((file=fopen(filename,"r"))==NULL){ | ||
| printf("Wrong File Name!\n"); | ||
| }else{ | ||
| while(fscanf(file,"%s",line)!=EOF){ | ||
| if(line[0]=='0'){ | ||
| int id=(line[1]-48)*1000+(line[2]-48)*100+(line[3]-48)*10+(line[4]-48); | ||
| lib->cursor=id; | ||
| int sex=line[5]-'0'; | ||
| char phone[12]={0}; | ||
| for(int i=0;i<11;i++){ | ||
| phone[i]=line[6+i]; | ||
| } | ||
| user_add_phone(lib,phone); | ||
| }else if(line[0]=='1'){ | ||
| char name[100]={0}; | ||
| for(int i=0;line[i]!='\0';i++){ | ||
| name[i]=line[i+1]; | ||
| } | ||
| user_add_name(lib,name); | ||
| }else if(line[0]=='2'){ | ||
| char email[100]={0}; | ||
| for(int i=0;line[i]!='\0';i++){ | ||
| email[i]=line[i+1]; | ||
| } | ||
| user_add_email(lib,email); | ||
| }else if(line[0]=='3'){ | ||
| char address[100]={0}; | ||
| for(int i=0;line[i]!='\0';i++){ | ||
| address[i]=line[i+1]; | ||
| } | ||
| user_add_email(lib,address); | ||
| } | ||
| } | ||
| break; | ||
| } | ||
| } | ||
| } | ||
|
|
||
| void lib_save(struct Lib *lib){ | ||
| FILE *file; | ||
| while(1){ | ||
| if((file=fopen(filename,"w"))!=NULL){break;} | ||
| else{printf("Fail to open.\n");} | ||
| } | ||
| for(int i=0;i<10000;i++){ | ||
| if(lib->users[i].exist==1){ | ||
| fputc('0',file); | ||
| fputc('0'+(i%10000)/1000,file); | ||
| fputc('0'+(i%1000)/100,file); | ||
| fputc('0'+(i%100)/10,file); | ||
| fputc('0'+i%10,file); | ||
| for(int dig=0;dig<11;dig++){ | ||
| fputc(lib->users[i].phone[dig],file); | ||
| } fputc(0,file);fputc(10,file); | ||
| fputc(49,file); | ||
| for(int dig=0;dig<strlen(lib->users[i].name)+1;dig++){ | ||
| fputc(lib->users[i].name[dig],file); | ||
| } fputc(10,file); | ||
| for(int dig=0;dig<strlen(lib->users[i].email)+1;dig++){ | ||
| fputc(lib->users[i].email[dig],file); | ||
| } fputc(10,file); | ||
| for(int dig=0;dig<strlen(lib->users[i].address)+1;dig++){ | ||
| fputc(lib->users[i].address[dig],file); | ||
| } fputc(10,file); | ||
| fputc(35,file);fputc(10,file); | ||
| } | ||
| } | ||
| } | ||
|
|
||
| void display1(){ | ||
| char cmd[200]; | ||
| int d; | ||
| struct Lib *lib=init_lib(); | ||
| while(1){ | ||
| printf("Please input your command:\n"); | ||
| scanf("%s",cmd); | ||
| if(cmd[0]=='1'){//输出所有内容 | ||
| print_all(lib); | ||
| }else if(cmd[0]=='2'){ | ||
| printf("help!help!help!\n"); | ||
| }else if(cmd[0]=='3'){ | ||
| lib_save(lib); | ||
| }else if(cmd[0]=='4'){ | ||
| lib_load(lib); | ||
| }else if(cmd[0]=='.'){ | ||
| if(cmd[1]='c'){ | ||
| char name[100]; | ||
| printf("name!\n"); | ||
| scanf("%s",name); | ||
| user_add_name(lib,name); | ||
| }else if(cmd[1]=='s'){ | ||
| lib_save(lib); | ||
| }else if(cmd[1]=='d'){ | ||
| printf("tell me which you want to delete?\n"); | ||
| scanf("%d",&d); | ||
| lib->users[d]; | ||
| }else if(cmd[1]=='r'){ | ||
| lib_load(lib); | ||
| }else if(cmd[1]=='p'){ | ||
| print_all(lib); | ||
| }else if(cmd[1]=='q'){ | ||
| if(cmd[2]=='1'){ | ||
| }else if(cmd[2]=='2'){ | ||
| }else if(cmd[2]=='3'){ | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
|
|
||
|
|
||
| int main(){ | ||
| display1(); | ||
| return 0; | ||
| } | ||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
| @@ -0,0 +1,133 @@ | ||
| #include<stdio.h> | ||
| #include<stdlib.h> | ||
| #include<string.h> | ||
| #define isTest 0 | ||
| struct para_cal{ | ||
| char *con; | ||
| int cen[128],words[26]; | ||
| int len; | ||
| }; | ||
|
|
||
| struct para_cal *init_para(char *parag){ | ||
| struct para_cal *para=(struct para_cal*)calloc(1,sizeof(struct para_cal)); | ||
| para->len=strlen(parag); | ||
| para->con=(char*)calloc(para->len,sizeof(char)); | ||
| for(int i=0;i<para->len;i++){ | ||
| para->con[i]=parag[i]; | ||
| } | ||
| return para; | ||
| } | ||
|
|
||
| int char_cen(struct para_cal *para){ | ||
| para->len=strlen(para->con); | ||
| for(int i=0;i<128;i++){para->cen[i]=0;} | ||
| for(int digit=0;digit<para->len;digit++){ | ||
| if(para->con[digit]>127||para->con[digit]<0){ | ||
| printf("please input right words,be sure they are Ascii!\n"); | ||
| return 1; | ||
| } | ||
| para->cen[para->con[digit]]++; | ||
| } | ||
| for(int i=0;i<26;i++){ | ||
| para->words[i]=para->cen[64+i]+para->cen[97+i]; | ||
| } | ||
| return 0; | ||
| } | ||
|
|
||
| void print_words_cen(struct para_cal *para){ | ||
| char *out=(char*)calloc(para->len+1,sizeof(char)); | ||
| for(int i=0;i<26;i++){ | ||
| printf("%c %d \n",i+65,para->words[i]); | ||
| } | ||
| } | ||
|
|
||
| void print_word(char *p,int len){ | ||
| char *i=(char*)calloc(len+1,sizeof(char)); | ||
| for(int m=0;m<len;m++){ | ||
| i[m]=p[m]; | ||
| } i[len]='\0'; | ||
| printf("%d\t%s\n",len,i); | ||
| } | ||
|
|
||
| char *search_replace(char *para,char *sea,char *tar){ | ||
| int len1=strlen(para); | ||
| int len2=strlen(sea); | ||
| int len3=strlen(tar); | ||
| if(isTest){printf("%d %d %d \n",len1,len2,len3);} | ||
| char *one,*two,*the,*sto,*res; | ||
| sto=(char*)calloc(len1,sizeof(char)); | ||
| for(int i=0;i<len1;i++){ | ||
| sto[i]=para[i]; | ||
| } if(isTest==1){print_word(sto,len1);} | ||
| for(int digit=0;digit<len1-len2+1;++digit){ | ||
| int dig=0; | ||
| for(dig=0;dig<len2;dig++){ | ||
| if(sto[digit+dig]!=sea[dig]){break;} | ||
| } if(dig==len2){ | ||
|
|
||
| one=(char*)calloc(digit,sizeof(char)); | ||
| for(dig=0;dig<digit;dig++){ | ||
| one[dig]=sto[dig]; | ||
| } if(isTest==1){print_word(one,digit);} | ||
|
|
||
| two=(char*)calloc(len3,sizeof(char)); | ||
| for(dig=0;dig<len3;dig++){ | ||
| two[dig]=tar[dig]; | ||
| } if(isTest==1){print_word(two,len3);} | ||
|
|
||
| the=(char*)calloc(len1-digit-len2,sizeof(char)); | ||
| for(dig=0;dig<len1-digit-len2;dig++){ | ||
| the[dig]=sto[digit+len2+dig]; | ||
| } if(isTest==1){print_word(the,len1-digit-len2);} | ||
|
|
||
| res=(char*)calloc(len1+len3-len2+1,sizeof(char)); | ||
| for(int i=0;i<len1+len3-len2+1;i++){ | ||
| if(i<digit){ | ||
| res[i]=sto[i]; | ||
| }else if(i<digit+len3){ | ||
| res[i]=tar[i-digit]; | ||
| }else { | ||
| res[i]=the[i-len3-digit]; | ||
| } | ||
| } res[len1+len3-len2]='\0'; | ||
| if(isTest){printf("%s\n",res);} | ||
| } | ||
| } | ||
| return res; | ||
| } | ||
|
|
||
| void file_save(char *artical,char *name){ | ||
| FILE *file=fopen(name,"w"); | ||
| for(int i=0;artical[i]!='\0';i++){ | ||
| fputc(artical[i],file); | ||
| } | ||
| fclose(file); | ||
| } | ||
|
|
||
| void display1(){ | ||
| char artical[100]="hello world!"; | ||
| struct para_cal *pro=init_para(artical); | ||
| char_cen(pro); | ||
| printf("word:%s\n",artical); | ||
| print_words_cen(pro); | ||
| } | ||
|
|
||
| void display2(){ | ||
| char artical[100]="111111222111"; | ||
| char tore[100]="333"; | ||
| char bere[100]="222"; | ||
| printf("the sentence before:\n\"%s\"\n",artical); | ||
| printf("Want the \"%s\" to be replaced as \"%s\"\n",bere,tore); | ||
| char *res=search_replace(artical,bere,tore); | ||
| printf("%s\n",res); | ||
| char name[10]="date.txt"; | ||
| printf("save file as %s\n",name); | ||
| file_save(artical,name); | ||
| } | ||
| int main(){ | ||
| printf("display1:\n"); | ||
| display1(); | ||
| printf("display2:\n"); | ||
| display2(); | ||
| return 0; | ||
| } |
| @@ -0,0 +1 @@ | ||
| 111111222111 |
| @@ -0,0 +1,315 @@ | ||
| #include<stdio.h> | ||
| #include<stdlib.h> | ||
| #include<string.h> | ||
| #include<math.h> | ||
| #define Len 1000 | ||
| #define isTest 1 | ||
|
|
||
|
|
||
| typedef struct { | ||
| int *con,len,sig; //sig=1 -> 正数 sig=0 -> 负数 | ||
| }Num; | ||
|
|
||
| typedef struct { | ||
| Num *nums; | ||
| int *sig; //[0]代表运算种类,[1]代表较大数位置 | ||
| Num *res; | ||
| }Pro; | ||
|
|
||
| int power(int a,int x){ | ||
| int res=1; | ||
| for(int i=0;i<x;i++){ | ||
| res*=a; | ||
| } | ||
| return res; | ||
| } | ||
|
|
||
| int bigger(Num *num1,Num *num2){ | ||
| if(num1->sig>0&&num2->sig<0){return 1;} | ||
| else if(num1->sig<0&&num2->sig>0){return 2;} | ||
| else{ | ||
| int tig=num1->sig; | ||
| for(int digit=Len-1;digit>=0;digit--){ | ||
| if(num1->con[digit]>num2->con[digit]){ | ||
| return tig?1:2; | ||
| }else if(num1->con[digit]<num2->con[digit]){ | ||
| return tig?2:1; | ||
| }else if(digit==0){ return 0; } | ||
| } | ||
| } | ||
| } | ||
|
|
||
|
|
||
| //比较两个num绝对值的大小。 | ||
| int num_abs_compare(Num *num1,Num *num2){ | ||
| for(int digit=Len-1;digit>=0;digit--){ | ||
| if(num1->con[digit]>num2->con[digit]){ | ||
| return 1; | ||
| }else if(num2->con[digit]<num2->con[digit]){ | ||
| return 2; | ||
| }else if(digit==0){ | ||
| return 0; | ||
| } | ||
| } | ||
| } | ||
|
|
||
| //比较两个num真实值的大小。 | ||
| int num_compare(Num *num1,Num *num2){ | ||
| if(num1->sig>0&&num2->sig<0){ | ||
| return 1; | ||
| }else if(num1->sig<0&&num2->sig>0){ | ||
| return 2; | ||
| }else if(num1->sig>0&&num2->sig>0){ | ||
| return num_abs_compare(num1,num2); | ||
| }else if(num1->sig<0&&num2->sig<0){ | ||
| return num_abs_compare(num2,num1); | ||
| } | ||
| } | ||
|
|
||
| //比较num和0的大小。 | ||
| int num_comto_zero(Num *num){ | ||
| for(int digit=0;digit<Len;digit++){ | ||
| if(num->con[digit]==0){ | ||
| break; | ||
| }else if(digit==Len-1){ | ||
| return 0; | ||
| } | ||
| } | ||
| if(num->sig){ | ||
| return 1; | ||
| }else{ | ||
| return -1; | ||
| } | ||
| } | ||
|
|
||
| //将字符串转为Num对象。 | ||
| Num *str_to_Num(char *str){ | ||
| Num *num=(Num*)calloc(1,sizeof(Num)); //分配num空间,初始化对象 | ||
| num->con=(int*)calloc(Len,sizeof(int)); //分配num.con的空间 | ||
| num->len=strlen(str); //获取字符串的长度 | ||
| if(str[0]=='-'){ //获取num应有正负值,并对长度做修正。 | ||
| num->sig=0; | ||
| num->len-=1; | ||
| }else{ | ||
| num->sig=1; | ||
| } | ||
| for(int digit=0;digit<Len;digit++){ //将字符串主体写入num.con中 | ||
| if(digit<num->len){ | ||
| num->con[digit]=str[num->len-num->sig-digit]-'0'; | ||
| }else { | ||
| num->con[digit]=0; | ||
| } | ||
| } | ||
| if(num_comto_zero(num)!=-1){num->sig=1;} | ||
| return num; | ||
| } | ||
|
|
||
| //将Num对象转为字符串。 | ||
| char *Num_to_str(Num *tar){ | ||
| char *res=(char*)calloc(Len,sizeof(char)); //分配字符串空间,初始化对象 | ||
| int digit=0; //初始化数位 | ||
| if(tar->sig==0){ //判断并执行写入符号位 | ||
| res[digit++]='-'; | ||
| } | ||
| for(int dig1=tar->len-1;dig1>=0;dig1--){ //将num.con写入字符串中 | ||
| res[digit++]=tar->con[dig1]+'0'; | ||
| } | ||
| return res; | ||
| } | ||
|
|
||
| //将int对象转化为Num对象。 | ||
| Num *int_to_Num(int tar){ | ||
| int digit=0; | ||
| Num *num=(Num*)calloc(1,sizeof(Num)); | ||
| num->con=(int*)calloc(Len,sizeof(Num)); | ||
| if(tar<0){num->sig=0;} | ||
| else{num->sig=1;} | ||
| for(digit=0;tar>0;digit++){ | ||
| num->con[digit]=tar%10; | ||
| tar/=10; | ||
| } | ||
| num->len=digit; | ||
| return num; | ||
| } | ||
|
|
||
| //将Num对象转化为int对象(可能会爆表)。 | ||
| int Num_to_int(Num *num){ | ||
| int tar=0; | ||
| for(int digit=0;digit<Len;digit++){ | ||
| tar+=num->con[digit]*power(10,digit); | ||
| } | ||
| tar*=num->sig=1?1:-1; | ||
| return tar; | ||
| } | ||
|
|
||
| //初始化pro对象 | ||
| Pro *pro_creat(int sig){ | ||
| Pro *pro=(Pro*)calloc(1,sizeof(Pro)); //分配pro空间 | ||
| pro->sig=(int*)calloc(2,sizeof(int)); //分配并写入运算类型 | ||
| pro->sig[0]=sig; | ||
| pro->nums=(Num*)calloc(2,sizeof(Num)); //分配运算对象空间 | ||
| pro->nums[0].con=(int*)calloc(Len,sizeof(int)); | ||
| pro->nums[1].con=(int*)calloc(Len,sizeof(int)); | ||
| pro->res=(Num*)calloc(sig!=3?1:2,sizeof(Num)); //分配运算结果的空间 | ||
| pro->res[0].con=(int*)calloc(Len,sizeof(int)); | ||
| if(sig==3){pro->res[1].con=(int*)calloc(Len,sizeof(int));} //如果是除法,给余数分配空间 | ||
| return pro; | ||
| } | ||
|
|
||
| //将num对象写入pro中。 | ||
| void Num_to_pro(Pro *pro,Num *num,int dig){ | ||
| pro->nums[dig]=*num; | ||
| } | ||
|
|
||
| //pro的正式运算 | ||
| void pro_start(Pro *pro){ | ||
| int bi,sm; | ||
| pro->sig[1]=num_abs_compare(pro->nums,pro->nums+1); | ||
| if(pro->sig[0]<2){ | ||
| if(pro->sig[0]!=(pro->nums[0].sig*pro->nums[1].sig)){ | ||
| //ba_add(pro->nums[0],pro->nums[1]); | ||
| //printf("开始加法。对象为%s和%s\n",Num_to_str(pro->nums),Num_to_str(pro->nums+1)); | ||
| // pro->res=str_to_Num("3999"); | ||
| int tig=0; | ||
| for(int digit=0;digit<Len;digit++){ | ||
| pro->res->con[digit]=pro->nums[0].con[digit]+pro->nums[1].con[digit]+tig; | ||
| //printf("%d",pro->res->con[digit]); | ||
| if(pro->res->con[digit]>9){ | ||
| pro->res->con[digit]-=10; | ||
| tig=1; | ||
| }else{tig=0;} | ||
| } | ||
| if(tig==1){printf("数据过大溢出,请调整Len值后重新编译运行!\n");} | ||
| pro->res->sig=pro->nums->sig; | ||
| pro->res->len=(pro->sig[1]==1)?pro->nums[0].len:pro->nums[1].len; | ||
| }else{ | ||
| //ba_dec(pro->nums[0],pro->nums[1]); | ||
| //printf("开始减法。对象为%s和%s\n",Num_to_str(pro->nums),Num_to_str(pro->nums+1)); | ||
| if(pro->sig[1]==0){ | ||
| pro->res=str_to_Num("0"); | ||
| }else{ | ||
| if(pro->sig[1]==1){ | ||
| bi=0,sm=1; | ||
| pro->res->sig=pro->nums->sig; | ||
| }else if(pro->sig[1]==2){ | ||
| bi=1,sm=0; | ||
| pro->res->sig=pro->nums->sig==1?0:1; | ||
| } | ||
| for(int digit=0,tig=0;digit<Len;digit++){ | ||
| pro->res->con[digit]=pro->nums[bi].con[digit]-pro->nums[sm].con[digit]-tig; | ||
| if(pro->res->con[digit]<0){ | ||
| pro->res->con[digit]+=10; | ||
| tig=1; | ||
| }else{ | ||
| tig=0; | ||
| } | ||
| } | ||
| int len=0; | ||
| for(len=Len;pro->res->con[len-1]==0;len--){} | ||
| pro->res->len=len; | ||
| } | ||
| } | ||
| }else if (pro->sig[0]==2){ | ||
| printf("开始乘法"); | ||
| if(pro->nums[0].sig==pro->nums[1].sig){ | ||
| pro->res->sig=1; | ||
| }else{pro->res->sig=0;} | ||
| for(int a=0;a<Len;a++){ | ||
| pro->res->con[a]=0; | ||
| } | ||
| for(int a=0;a<Len;a++){ | ||
| for(int b=0;b<Len;b++){ | ||
| int mid=0;int tig=a+b; | ||
| pro->res->con[tig]+=pro->nums[0].con[a]*pro->nums[1].con[b]; | ||
| while(pro->res->con[tig]>9){ | ||
| mid=pro->res->con[tig]/10; | ||
| pro->res->con[tig]%=10; | ||
| pro->res->con[++tig]+=mid; | ||
| } | ||
| } | ||
| } | ||
| int len=0; | ||
| for(len=Len;pro->res->con[len-1]==0;len--){} | ||
| pro->res->len=len; | ||
| }else if (pro->sig[0]==3){ | ||
| printf("开始除法"); | ||
| Num *b1,*b2; | ||
| int mid,n; | ||
| b1=str_to_Num(Num_to_str(pro->nums[0])); | ||
| b2=str_to_Num("0"); | ||
| for(int digit=pro->num[0].len-pro->num[1].len;digit>=0;digit--){ | ||
| for(int dig=digit;digit<b1->len;digit--){ | ||
| b2->con[dig]=b1->con[dig]; | ||
| b1->con[dig]=0; | ||
| } | ||
| for(len=Len;b1[len-1]==0;len--){} | ||
| b1->len=len; | ||
| for(len=Len;b2[len-1]==0;len--){} | ||
| b2->len=len; | ||
| for(pro->res[0].con[dig]=0;num_compare(b2,pro->nums[1])==1;pro->res[0].con[dig]++){ | ||
| Pro cal=pro_creat(1); | ||
| Num_to_pro(cal,b2,0); | ||
| Num_to_pro(cal,pro->nums+1,1); | ||
| pro_start(cal); | ||
| } | ||
| for(int dig=digit;digit<b1->len;digit--){ | ||
|
|
||
| } | ||
| } | ||
| } | ||
|
|
||
| void test6(){ | ||
|
|
||
| } | ||
|
|
||
| void test5(){ | ||
| // for(int a=0;a<1000;a++){ | ||
| // for(int b=0;b<1000;b++){ | ||
| int a=11;int b=1100; | ||
| Pro *pro=pro_creat(2); | ||
| Num_to_pro(pro,int_to_Num(a),0); | ||
| Num_to_pro(pro,int_to_Num(b),1); | ||
| pro_start(pro); | ||
| printf("%d * %d = %s\n",a,b,Num_to_str(pro->res)); | ||
| // }} | ||
| } | ||
|
|
||
| void test4(){ | ||
| printf("1000 is %s\n",Num_to_str(int_to_Num(1000))); | ||
| printf("1000 is %d\n",Num_to_int(str_to_Num("1000"))); | ||
| } | ||
|
|
||
| void test3(){ | ||
| char *one="1000"; | ||
| char *two="1"; | ||
| Pro *pro=pro_creat(1); | ||
| Num_to_pro(pro,str_to_Num(one),0); | ||
| Num_to_pro(pro,str_to_Num(two),1); | ||
| pro_start(pro); | ||
| printf("%s\n",Num_to_str(pro->res)); | ||
| } | ||
|
|
||
| void test2(){ | ||
| char *num_char="-1000000000000031415926"; | ||
| Num *num=str_to_Num(num_char); | ||
| printf("%s\n",Num_to_str(num)); | ||
|
|
||
| } | ||
|
|
||
|
|
||
|
|
||
| void test1(){ | ||
| int length=100; | ||
| Num *num=(Num*)calloc(1,sizeof(Num)); | ||
| num->sig=1; | ||
| num->con=(int*)calloc(Len,sizeof(int)); | ||
| for(int digit=0;digit<length;digit++){ | ||
| num->con[digit]=9; | ||
| } num->len=length; | ||
| printf("%s\n",Num_to_str(num)); | ||
| } | ||
|
|
||
| int main(){ | ||
| test5(); | ||
| return 0; | ||
| } |
| @@ -0,0 +1 @@ | ||
| ,yuyang,yuyang-desktop,05.05.2018 12:09,file:///home/yuyang/.config/libreoffice/4; |
| @@ -0,0 +1,52 @@ | ||
| #include<stdio.h> | ||
| struct Data{ | ||
| int day; | ||
| int month; | ||
| }; | ||
| struct Context{ | ||
| int weekdata; | ||
| struct Data data; | ||
| int add; | ||
| }; | ||
|
|
||
| int main(){ | ||
| int months[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; | ||
| int lock=1; | ||
| struct Context con; | ||
| con.data.day=1; | ||
| con.data.month=1; | ||
| con.weekdata=6; | ||
| con.add=0; | ||
| while(con.data.month<13){ | ||
| if(con.add==0&&con.data.day==1){ | ||
| printf("*********************************\nThis is the month %d\n\n",con.data.month); | ||
| lock=1; | ||
| } | ||
| //输出数据 | ||
| if(con.add==con.weekdata&&lock){ | ||
| if(con.data.day<10){printf(" ");} | ||
| printf("%d\t",con.data.day++); | ||
| con.weekdata=(con.weekdata<6)?con.weekdata+1:0; | ||
| }else { | ||
| printf(" \t"); | ||
| } con.add++; | ||
|
|
||
| //尝试更新月份 | ||
| if(con.data.day==months[con.data.month]+1){ | ||
| con.data.month++; | ||
| con.data.day=1; | ||
| lock=0; | ||
| } | ||
|
|
||
| //尝试换行 | ||
| if(con.add==7){ | ||
| printf("\n"); | ||
| con.add=0; | ||
| } | ||
| } | ||
| printf("日历打印完毕!\n"); | ||
| while(1); | ||
| return 0; | ||
| } | ||
|
|
||
|
|
| @@ -0,0 +1,138 @@ | ||
| #include<stdio.h> | ||
| #include<string.h> | ||
| #include<stdlib.h> | ||
| #define Len 1000 //定义此运算体系中支持的最大长度 | ||
|
|
||
| //此运算体系中用于存储数字的对象。 | ||
| struct Num{ | ||
| int con[Len]; | ||
| int sig; //代表此数字的正负号。0为负,1为正 | ||
| int len; | ||
| }; | ||
|
|
||
| //此运算体系中一次外显的运算过程。 | ||
| struct Pro{ | ||
| struct Num nums[2]; | ||
| int sig[2]; //0位代表运算类型,0-加 1-减 2-乘 3-除 | ||
| //1位代表较大的数字的下标 | ||
| struct Num result; | ||
| }; | ||
|
|
||
| //此运算体系中输入一个长数 | ||
| //输入:以字符串形式存储的一个数字 ,负号加在最前面。 | ||
| void NumIn(char *s_num,struct *Num result){ | ||
| struct Num *res=(struct Num *)calloc(1,sizeof(struct Num)); | ||
| for(int digit=0;digit<Len;digit++){ | ||
| res->con[digit]=0; | ||
| } | ||
| res->sig=s_num[0]=='-'?1:0; | ||
| res->len=strlen(s_num)-res->sig; | ||
| for(int digit=0;digit+res->sig<res->len;digit++){ | ||
| res->con[digit]=s_num[res->len-digit-1]; | ||
| } | ||
| res->sig=!res->sig; | ||
| *result=*res; | ||
| } | ||
|
|
||
| //内在的两同号数相加运算 | ||
| void ba_add(struct Num *num,struct Num *res){ | ||
| for(digit=0;digit<Len;digit++){ | ||
| res->con[digit]=0; | ||
| } | ||
| int tig=0; //这个变量用于记录进位与否。 | ||
| int dig=0; //这个代表正在运算的位数。 | ||
| for(digit=0;digit<Len;digit++){ | ||
| res.con[digit]=num[0].con[digit]+num[1].con[digit]+tig; | ||
| if(res.con[digit]>9){ | ||
| tig=1; | ||
| res.con[digit]-=10; | ||
| }else{ | ||
| tig=0; | ||
| } | ||
| } | ||
| res.sig=num[0].sig; | ||
| } | ||
|
|
||
| //内在的两同号数大减小运算 | ||
| void ba_dec(struct Num *num,struct Num *res){ //保证【0】一定大于【1】 | ||
| for(digit=0;digit<Len;digit++){ | ||
| res->con[digit]=0; | ||
| } | ||
| int tig=0; //用于记录拆借的数。 | ||
| int dig=0; //同上。 | ||
| for(digit=0;digit<Len;digit++){ | ||
| res->con[digit]=num[0].con[digit]-num[1].con[digit]-tig; | ||
| if(res->con[digit]<0){ | ||
| res->con[digit]+=10; | ||
| tig=1; | ||
| }else{ | ||
| tig=0; | ||
| } | ||
| } | ||
| res.sig=num[0].sig; | ||
| } | ||
|
|
||
| //乘法 | ||
| void ba_mul(struct Num *num,struct Num *res){ | ||
| for(digit=0;digit<Len;digit++){ | ||
| res->con[digit]=0; | ||
| } | ||
| int n=0,n1=0,n2=0; | ||
| for(co1=0;co1<num[0].len;co1++){ | ||
| for(co2=0;co2<num[1].len;co2++){ | ||
| n=num[0].con[co1]*num[1].con[co2]; | ||
| n1=n/10,n2=n%10; //n1代表高位,n2代表低位 | ||
| res.con[co1+co2]+=n2; | ||
| res.con[co1+co2+1]+=n1; | ||
| } | ||
| } | ||
| res.sig=num[0].sig==num[1].sig; | ||
| } | ||
|
|
||
| //除法 | ||
| void ba_div(struct Num *num,struct Num *res){ | ||
| // for(digit=0;digit<Len;digit++){ | ||
| // res->con[digit]=0; | ||
| // } | ||
| // int bnum[Len]=0; | ||
| // for(digit=num[0].len-num[1].len;digit>=0;digit--){ | ||
| // for(int dig=digit;digit<num[0].len;digit++){ | ||
| // | ||
| // } | ||
| // for(res->con[digit]=0;) | ||
| // } | ||
| } | ||
|
|
||
| //定义了一次外显的运算, pro 外显运算的储存位置 | ||
| // num1,num2 参与运算的两个数字 | ||
| // type 外线运算的种类 0-加 1-减 2-乘 3-除 | ||
| void pro_init(struct Pro *pro,struct Num num1,struct Num num2,int type){ | ||
| pro->nums[0]=num1; | ||
| pro->nums[1]=num2; | ||
| pro->sig[0]=type; | ||
| for(int digit=Len-1;digit>=0;digit--){ | ||
| if(pro->nums[0].con[digit]>pro->nums[1].con[digit]){ | ||
| pro->sig[1]=0; | ||
| break; | ||
| } else if(pro->nums[0].con[digit]<pro->nums[1].con[digit]){ | ||
| pro->sig[1]=1; | ||
| break; | ||
| } else if(digit==0){ | ||
| pro->sig[1]=-1; | ||
| } | ||
|
|
||
| } | ||
| switch (type) //开始运算 | ||
| { | ||
| if(type<2){ | ||
| if(type!=(pro->nums[0].sig==pro->nums[1].sig)){ | ||
| struct Num numin[2]={pro->nums[0],pro->nums[1]}; | ||
| ba_add(numin,pro->result); | ||
| }else{ | ||
|
|
||
| } | ||
| } | ||
| } | ||
|
|
||
|
|
||
|
|
| @@ -0,0 +1,315 @@ | ||
| #include<stdio.h> | ||
| #include<stdlib.h> | ||
| #include<string.h> | ||
| #include<math.h> | ||
| #define Len 1000 | ||
| #define isTest 1 | ||
|
|
||
|
|
||
| typedef struct { | ||
| int *con,len,sig; //sig=1 -> 正数 sig=0 -> 负数 | ||
| }Num; | ||
|
|
||
| typedef struct { | ||
| Num *nums; | ||
| int *sig; //[0]代表运算种类,[1]代表较大数位置 | ||
| Num *res; | ||
| }Pro; | ||
|
|
||
| int power(int a,int x){ | ||
| int res=1; | ||
| for(int i=0;i<x;i++){ | ||
| res*=a; | ||
| } | ||
| return res; | ||
| } | ||
|
|
||
| int bigger(Num *num1,Num *num2){ | ||
| if(num1->sig>0&&num2->sig<0){return 1;} | ||
| else if(num1->sig<0&&num2->sig>0){return 2;} | ||
| else{ | ||
| int tig=num1->sig; | ||
| for(int digit=Len-1;digit>=0;digit--){ | ||
| if(num1->con[digit]>num2->con[digit]){ | ||
| return tig?1:2; | ||
| }else if(num1->con[digit]<num2->con[digit]){ | ||
| return tig?2:1; | ||
| }else if(digit==0){ return 0; } | ||
| } | ||
| } | ||
| } | ||
|
|
||
|
|
||
| //比较两个num绝对值的大小。 | ||
| int num_abs_compare(Num *num1,Num *num2){ | ||
| for(int digit=Len-1;digit>=0;digit--){ | ||
| if(num1->con[digit]>num2->con[digit]){ | ||
| return 1; | ||
| }else if(num2->con[digit]<num2->con[digit]){ | ||
| return 2; | ||
| }else if(digit==0){ | ||
| return 0; | ||
| } | ||
| } | ||
| } | ||
|
|
||
| //比较两个num真实值的大小。 | ||
| int num_compare(Num *num1,Num *num2){ | ||
| if(num1->sig>0&&num2->sig<0){ | ||
| return 1; | ||
| }else if(num1->sig<0&&num2->sig>0){ | ||
| return 2; | ||
| }else if(num1->sig>0&&num2->sig>0){ | ||
| return num_abs_compare(num1,num2); | ||
| }else if(num1->sig<0&&num2->sig<0){ | ||
| return num_abs_compare(num2,num1); | ||
| } | ||
| } | ||
|
|
||
| //比较num和0的大小。 | ||
| int num_comto_zero(Num *num){ | ||
| for(int digit=0;digit<Len;digit++){ | ||
| if(num->con[digit]==0){ | ||
| break; | ||
| }else if(digit==Len-1){ | ||
| return 0; | ||
| } | ||
| } | ||
| if(num->sig){ | ||
| return 1; | ||
| }else{ | ||
| return -1; | ||
| } | ||
| } | ||
|
|
||
| //将字符串转为Num对象。 | ||
| Num *str_to_Num(char *str){ | ||
| Num *num=(Num*)calloc(1,sizeof(Num)); //分配num空间,初始化对象 | ||
| num->con=(int*)calloc(Len,sizeof(int)); //分配num.con的空间 | ||
| num->len=strlen(str); //获取字符串的长度 | ||
| if(str[0]=='-'){ //获取num应有正负值,并对长度做修正。 | ||
| num->sig=0; | ||
| num->len-=1; | ||
| }else{ | ||
| num->sig=1; | ||
| } | ||
| for(int digit=0;digit<Len;digit++){ //将字符串主体写入num.con中 | ||
| if(digit<num->len){ | ||
| num->con[digit]=str[num->len-num->sig-digit]-'0'; | ||
| }else { | ||
| num->con[digit]=0; | ||
| } | ||
| } | ||
| if(num_comto_zero(num)!=-1){num->sig=1;} | ||
| return num; | ||
| } | ||
|
|
||
| //将Num对象转为字符串。 | ||
| char *Num_to_str(Num *tar){ | ||
| char *res=(char*)calloc(Len,sizeof(char)); //分配字符串空间,初始化对象 | ||
| int digit=0; //初始化数位 | ||
| if(tar->sig==0){ //判断并执行写入符号位 | ||
| res[digit++]='-'; | ||
| } | ||
| for(int dig1=tar->len-1;dig1>=0;dig1--){ //将num.con写入字符串中 | ||
| res[digit++]=tar->con[dig1]+'0'; | ||
| } | ||
| return res; | ||
| } | ||
|
|
||
| //将int对象转化为Num对象。 | ||
| Num *int_to_Num(int tar){ | ||
| int digit=0; | ||
| Num *num=(Num*)calloc(1,sizeof(Num)); | ||
| num->con=(int*)calloc(Len,sizeof(Num)); | ||
| if(tar<0){num->sig=0;} | ||
| else{num->sig=1;} | ||
| for(digit=0;tar>0;digit++){ | ||
| num->con[digit]=tar%10; | ||
| tar/=10; | ||
| } | ||
| num->len=digit; | ||
| return num; | ||
| } | ||
|
|
||
| //将Num对象转化为int对象(可能会爆表)。 | ||
| int Num_to_int(Num *num){ | ||
| int tar=0; | ||
| for(int digit=0;digit<Len;digit++){ | ||
| tar+=num->con[digit]*power(10,digit); | ||
| } | ||
| tar*=num->sig=1?1:-1; | ||
| return tar; | ||
| } | ||
|
|
||
| //初始化pro对象 | ||
| Pro *pro_creat(int sig){ | ||
| Pro *pro=(Pro*)calloc(1,sizeof(Pro)); //分配pro空间 | ||
| pro->sig=(int*)calloc(2,sizeof(int)); //分配并写入运算类型 | ||
| pro->sig[0]=sig; | ||
| pro->nums=(Num*)calloc(2,sizeof(Num)); //分配运算对象空间 | ||
| pro->nums[0].con=(int*)calloc(Len,sizeof(int)); | ||
| pro->nums[1].con=(int*)calloc(Len,sizeof(int)); | ||
| pro->res=(Num*)calloc(sig!=3?1:2,sizeof(Num)); //分配运算结果的空间 | ||
| pro->res[0].con=(int*)calloc(Len,sizeof(int)); | ||
| if(sig==3){pro->res[1].con=(int*)calloc(Len,sizeof(int));} //如果是除法,给余数分配空间 | ||
| return pro; | ||
| } | ||
|
|
||
| //将num对象写入pro中。 | ||
| void Num_to_pro(Pro *pro,Num *num,int dig){ | ||
| pro->nums[dig]=*num; | ||
| } | ||
|
|
||
| //pro的正式运算 | ||
| void pro_start(Pro *pro){ | ||
| int bi,sm; | ||
| pro->sig[1]=num_abs_compare(pro->nums,pro->nums+1); | ||
| if(pro->sig[0]<2){ | ||
| if(pro->sig[0]!=(pro->nums[0].sig*pro->nums[1].sig)){ | ||
| //ba_add(pro->nums[0],pro->nums[1]); | ||
| //printf("开始加法。对象为%s和%s\n",Num_to_str(pro->nums),Num_to_str(pro->nums+1)); | ||
| // pro->res=str_to_Num("3999"); | ||
| int tig=0; | ||
| for(int digit=0;digit<Len;digit++){ | ||
| pro->res->con[digit]=pro->nums[0].con[digit]+pro->nums[1].con[digit]+tig; | ||
| //printf("%d",pro->res->con[digit]); | ||
| if(pro->res->con[digit]>9){ | ||
| pro->res->con[digit]-=10; | ||
| tig=1; | ||
| }else{tig=0;} | ||
| } | ||
| if(tig==1){printf("数据过大溢出,请调整Len值后重新编译运行!\n");} | ||
| pro->res->sig=pro->nums->sig; | ||
| pro->res->len=(pro->sig[1]==1)?pro->nums[0].len:pro->nums[1].len; | ||
| }else{ | ||
| //ba_dec(pro->nums[0],pro->nums[1]); | ||
| //printf("开始减法。对象为%s和%s\n",Num_to_str(pro->nums),Num_to_str(pro->nums+1)); | ||
| if(pro->sig[1]==0){ | ||
| pro->res=str_to_Num("0"); | ||
| }else{ | ||
| if(pro->sig[1]==1){ | ||
| bi=0,sm=1; | ||
| pro->res->sig=pro->nums->sig; | ||
| }else if(pro->sig[1]==2){ | ||
| bi=1,sm=0; | ||
| pro->res->sig=pro->nums->sig==1?0:1; | ||
| } | ||
| for(int digit=0,tig=0;digit<Len;digit++){ | ||
| pro->res->con[digit]=pro->nums[bi].con[digit]-pro->nums[sm].con[digit]-tig; | ||
| if(pro->res->con[digit]<0){ | ||
| pro->res->con[digit]+=10; | ||
| tig=1; | ||
| }else{ | ||
| tig=0; | ||
| } | ||
| } | ||
| int len=0; | ||
| for(len=Len;pro->res->con[len-1]==0;len--){} | ||
| pro->res->len=len; | ||
| } | ||
| } | ||
| }else if (pro->sig[0]==2){ | ||
| printf("开始乘法"); | ||
| if(pro->nums[0].sig==pro->nums[1].sig){ | ||
| pro->res->sig=1; | ||
| }else{pro->res->sig=0;} | ||
| for(int a=0;a<Len;a++){ | ||
| pro->res->con[a]=0; | ||
| } | ||
| for(int a=0;a<Len;a++){ | ||
| for(int b=0;b<Len;b++){ | ||
| int mid=0;int tig=a+b; | ||
| pro->res->con[tig]+=pro->nums[0].con[a]*pro->nums[1].con[b]; | ||
| while(pro->res->con[tig]>9){ | ||
| mid=pro->res->con[tig]/10; | ||
| pro->res->con[tig]%=10; | ||
| pro->res->con[++tig]+=mid; | ||
| } | ||
| } | ||
| } | ||
| int len=0; | ||
| for(len=Len;pro->res->con[len-1]==0;len--){} | ||
| pro->res->len=len; | ||
| }else if (pro->sig[0]==3){ | ||
| printf("开始除法"); | ||
| Num *b1,*b2; | ||
| int mid,n; | ||
| b1=str_to_Num(Num_to_str(pro->nums[0])); | ||
| b2=str_to_Num("0"); | ||
| for(int digit=pro->num[0].len-pro->num[1].len;digit>=0;digit--){ | ||
| for(int dig=digit;digit<b1->len;digit--){ | ||
| b2->con[dig]=b1->con[dig]; | ||
| b1->con[dig]=0; | ||
| } | ||
| for(len=Len;b1[len-1]==0;len--){} | ||
| b1->len=len; | ||
| for(len=Len;b2[len-1]==0;len--){} | ||
| b2->len=len; | ||
| for(pro->res[0].con[dig]=0;num_compare(b2,pro->nums[1])==1;pro->res[0].con[dig]++){ | ||
| Pro cal=pro_creat(1); | ||
| Num_to_pro(cal,b2,0); | ||
| Num_to_pro(cal,pro->nums+1,1); | ||
| pro_start(cal); | ||
| } | ||
| for(int dig=digit;digit<b1->len;digit--){ | ||
|
|
||
| } | ||
| } | ||
| } | ||
|
|
||
| void test6(){ | ||
|
|
||
| } | ||
|
|
||
| void test5(){ | ||
| // for(int a=0;a<1000;a++){ | ||
| // for(int b=0;b<1000;b++){ | ||
| int a=11;int b=1100; | ||
| Pro *pro=pro_creat(2); | ||
| Num_to_pro(pro,int_to_Num(a),0); | ||
| Num_to_pro(pro,int_to_Num(b),1); | ||
| pro_start(pro); | ||
| printf("%d * %d = %s\n",a,b,Num_to_str(pro->res)); | ||
| // }} | ||
| } | ||
|
|
||
| void test4(){ | ||
| printf("1000 is %s\n",Num_to_str(int_to_Num(1000))); | ||
| printf("1000 is %d\n",Num_to_int(str_to_Num("1000"))); | ||
| } | ||
|
|
||
| void test3(){ | ||
| char *one="1000"; | ||
| char *two="1"; | ||
| Pro *pro=pro_creat(1); | ||
| Num_to_pro(pro,str_to_Num(one),0); | ||
| Num_to_pro(pro,str_to_Num(two),1); | ||
| pro_start(pro); | ||
| printf("%s\n",Num_to_str(pro->res)); | ||
| } | ||
|
|
||
| void test2(){ | ||
| char *num_char="-1000000000000031415926"; | ||
| Num *num=str_to_Num(num_char); | ||
| printf("%s\n",Num_to_str(num)); | ||
|
|
||
| } | ||
|
|
||
|
|
||
|
|
||
| void test1(){ | ||
| int length=100; | ||
| Num *num=(Num*)calloc(1,sizeof(Num)); | ||
| num->sig=1; | ||
| num->con=(int*)calloc(Len,sizeof(int)); | ||
| for(int digit=0;digit<length;digit++){ | ||
| num->con[digit]=9; | ||
| } num->len=length; | ||
| printf("%s\n",Num_to_str(num)); | ||
| } | ||
|
|
||
| int main(){ | ||
| test5(); | ||
| return 0; | ||
| } |
| @@ -0,0 +1,13 @@ | ||
| #include<stdio.h> | ||
|
|
||
| void ba_div(struct Num *nums,struct Num *res){ | ||
| int nu1[Len],nu2[Len]; | ||
| for(int digit=nums[0].len-nums[1].len;digit>=0;digit--){ | ||
| for(int dig1=digit;dig1<nums[0].len;digit++){ | ||
| nu1[dig1-digit]=nums[0].con[dig1]; | ||
| nums[0].con[dig1]=0; | ||
| } | ||
| res[0].con[digit]=0; | ||
| while(1){ | ||
|
|
||
| } |
| @@ -0,0 +1,376 @@ | ||
| #include<stdio.h> | ||
| #include<stdlib.h> | ||
| #include<string.h> | ||
| #define filename "data.txt" | ||
|
|
||
| struct User{ | ||
| int id,exist; | ||
| char name[100]; | ||
| int sex; | ||
| char phone[12]; | ||
| char email[100]; | ||
| char address[100]; | ||
| }; | ||
|
|
||
| struct List{ | ||
| int list[10000]; | ||
| int cur; | ||
| }; | ||
|
|
||
| struct Lib{ | ||
| struct User users[10000]; | ||
| int cursor; | ||
| }; | ||
|
|
||
| struct Lib *init_lib(){ | ||
| struct Lib *lib=(struct Lib*)calloc(1,sizeof(struct Lib)); | ||
| for(int i=0;i<10000;i++){ | ||
| lib->users[i].id=i; | ||
| lib->users[i].exist=0; | ||
| } | ||
| return lib; | ||
| } | ||
|
|
||
| int init_user(struct Lib *lib){ | ||
| for(int i=0;i<10000;i++){ | ||
| if(lib->users[i].exist=0){ | ||
| lib->cursor=i; | ||
| lib->users[i].id=i; | ||
| lib->users[i].exist=1; | ||
| break; | ||
| } | ||
| } | ||
| return lib->cursor; | ||
| } | ||
|
|
||
| void print_user(struct Lib *lib){ | ||
| struct User user=lib->users[lib->cursor]; | ||
| if(user.exist==0){ | ||
| printf("User does not exist!\n"); | ||
| }else{ | ||
| printf("------------------------------------------------\n"); | ||
| printf("ID:%d\n\tName:%s\n\tSex:%s\n\tPhone numser:%s\n\te-mail:%s\n\tAddress:%s\n\t",user.id,user.name,user.sex==1?"boy":"girl",user.phone,user.email,user.address); | ||
| printf("------------------------------------------------\n"); | ||
| } | ||
| } | ||
|
|
||
| void print_by_list(struct Lib *lib,struct List *list){ | ||
| for(int i=0;i<list->cur;i++){ | ||
| lib->cursor=list->list[i]; | ||
| print_user(lib); | ||
| printf("\n\n"); | ||
| } | ||
| } | ||
|
|
||
| void print_all(struct Lib *lib){ | ||
| for(int i=0;i<10000;i++){ | ||
| if(lib->users[i].exist==0){continue;} | ||
| lib->cursor=i; | ||
| print_user(lib); | ||
| } | ||
| } | ||
|
|
||
| void user_add_name(struct Lib *lib,char *name){ | ||
| int len=strlen(name); | ||
| int i=0; | ||
| for(i=0;i<len;i++){ | ||
| lib->users[lib->cursor].name[i]=name[i]; | ||
| } lib->users[lib->cursor].name[i]='\0'; | ||
| } | ||
|
|
||
| void user_add_sex(struct Lib *lib,int sex){ | ||
| lib->users[lib->cursor].sex=sex; | ||
| } | ||
|
|
||
| void user_add_phone(struct Lib *lib,char *phone){ | ||
| for(int i=0;i<12;i++){ | ||
| lib->users[lib->cursor].phone[i]=phone[i]; | ||
| } | ||
| } | ||
|
|
||
| void user_add_email(struct Lib *lib,char *email){ | ||
| int len=strlen(email); | ||
| for(int i=0;i<len+1;i++){ | ||
| lib->users[lib->cursor].email[i]=email[i]; | ||
| } | ||
| } | ||
|
|
||
| void user_add_address(struct Lib *lib,char *address){ | ||
| int len=strlen(address); | ||
| for(int i=0;i<len+1;i++){ | ||
| lib->users[lib->cursor].address[i]=address[i]; | ||
| } | ||
| } | ||
|
|
||
| void add_user(struct Lib *lib){ | ||
| init_user(lib); | ||
| while(1){ | ||
| printf("Please input your name....\n"); | ||
| char name[100]; | ||
| scanf("%s",name); | ||
| user_add_name(lib,name); | ||
| printf("Are you a boy or a gril?(boy:1,gril:0)\n"); | ||
| int sex; | ||
| scanf("%d",&sex); | ||
| user_add_sex(lib,sex); | ||
| printf("What is your phone number?\n"); | ||
| char phone[100]; | ||
| while(1){ | ||
| scanf("%s",phone); | ||
| if(strlen(phone)==11){ | ||
| break; | ||
| }else{ | ||
| printf("Wrong formate!\ntell me again!\n"); | ||
| } | ||
| } | ||
| user_add_phone(lib,phone); | ||
| printf("What is your email?\n"); | ||
| char email[100]; | ||
| scanf("%s",email); | ||
| user_add_email(lib,email); | ||
| printf("What is your address?\n"); | ||
| char address[100]; | ||
| scanf("%s",address); | ||
| user_add_address(lib,address); | ||
| printf("So,is your imformation Right?(yes:1,no:0)\n"); | ||
| print_user(lib); | ||
| int yon; | ||
| scanf("%d",&yon); | ||
| if(yon==1){break;} | ||
| } | ||
| } | ||
|
|
||
| struct List *search_name(struct Lib *lib,char *name){ | ||
| struct List *list=(struct List*)calloc(1,sizeof(struct List)); | ||
| list->cur=0; | ||
| int len=strlen(name); | ||
| for(int i=0;i<10000;i++){ | ||
| int tig=1; | ||
| for(int digit=0;digit<len&&tig==1;digit++){ | ||
| if(lib->users[i].name[digit]!=name[digit]&&lib->users[i].exist==1){ | ||
| tig=0; | ||
| } | ||
| } | ||
| if(tig==1){ | ||
| list->list[list->cur]=i; | ||
| list->cur+=1; | ||
| } | ||
| } | ||
| return list; | ||
| } | ||
|
|
||
| struct List *search_sex(struct Lib *lib,int sex){ | ||
| struct List *list=(struct List*)calloc(1,sizeof(struct List)); | ||
| list->cur=0; | ||
| for(int i=0;i<10000;i++){ | ||
| if(lib->users[i].sex==sex&&lib->users[i].exist==1){ | ||
| list->list[list->cur]=i; | ||
| list->cur+=1; | ||
| } | ||
| } | ||
| return list; | ||
| } | ||
|
|
||
| struct List *search_phone(struct Lib *lib,char *phone){ | ||
| struct List *list=(struct List*)calloc(1,sizeof(struct List)); | ||
| list->cur=0; | ||
| for(int i=0;i<10000;i++){ | ||
| int tig=1; | ||
| for(int digit=0;digit<11&&tig==1;digit++){ | ||
| if(lib->users[i].phone[digit]!=phone[digit]&&lib->users[i].exist==1){ | ||
| tig=0; | ||
| } | ||
| } | ||
| if(tig==1){ | ||
| list->list[list->cur]=i; | ||
| list->cur+=1; | ||
| } | ||
| } | ||
| return list; | ||
| } | ||
|
|
||
| struct List *search_email(struct Lib *lib,char *email){ | ||
| struct List *list=(struct List*)calloc(1,sizeof(struct List)); | ||
| list->cur=0; | ||
| int len=strlen(email); | ||
| for(int i=0;i<10000;i++){ | ||
| int tig=1; | ||
| for(int digit=0;digit<len&&tig==1;digit++){ | ||
| if(lib->users[i].email[digit]!=email[digit]&&lib->users[i].exist==1){ | ||
| tig=0; | ||
| } | ||
| } | ||
| if(tig==1){ | ||
| list->list[list->cur]=i; | ||
| list->cur+=1; | ||
| } | ||
| } | ||
| return list; | ||
| } | ||
|
|
||
| struct List *search_address(struct Lib *lib,char *address){ | ||
| struct List *list=(struct List*)calloc(1,sizeof(struct List)); | ||
| list->cur=0; | ||
| int len=strlen(address); | ||
| for(int i=0;i<10000;i++){ | ||
| int tig=1; | ||
| for(int digit=0;digit<len&&tig==1;digit++){ | ||
| if(lib->users[i].address[digit]!=address[digit]&&lib->users[i].exist==1){ | ||
| tig=0; | ||
| } | ||
| } | ||
| if(tig==1){ | ||
| list->list[list->cur]=i; | ||
| list->cur+=1; | ||
| } | ||
| } | ||
| return list; | ||
| } | ||
|
|
||
| void delete_user(struct Lib *lib){ | ||
| lib->users[lib->cursor].exist=0; | ||
| } | ||
|
|
||
| void delete_by_list(struct Lib *lib,struct List *list){ | ||
| for(int i=0;i<list->cur;i++){ | ||
| lib->cursor=list->list[i]; | ||
| delete_user(lib); | ||
| } | ||
| } | ||
|
|
||
| void lib_load(struct Lib *lib){ | ||
| FILE *file; | ||
| char line[200]; | ||
| while(1){ | ||
| if((file=fopen(filename,"r"))==NULL){ | ||
| printf("Wrong File Name!\n"); | ||
| }else{ | ||
| while(fscanf(file,"%s",line)!=EOF){ | ||
| if(line[0]=='0'){ | ||
| int id=(line[1]-48)*1000+(line[2]-48)*100+(line[3]-48)*10+(line[4]-48); | ||
| lib->cursor=id; | ||
| int sex=line[5]-'0'; | ||
| char phone[12]={0}; | ||
| for(int i=0;i<11;i++){ | ||
| phone[i]=line[6+i]; | ||
| } | ||
| user_add_phone(lib,phone); | ||
| }else if(line[0]=='1'){ | ||
| char name[100]={0}; | ||
| for(int i=0;line[i]!='\0';i++){ | ||
| name[i]=line[i+1]; | ||
| } | ||
| user_add_name(lib,name); | ||
| }else if(line[0]=='2'){ | ||
| char email[100]={0}; | ||
| for(int i=0;line[i]!='\0';i++){ | ||
| email[i]=line[i+1]; | ||
| } | ||
| user_add_email(lib,email); | ||
| }else if(line[0]=='3'){ | ||
| char address[100]={0}; | ||
| for(int i=0;line[i]!='\0';i++){ | ||
| address[i]=line[i+1]; | ||
| } | ||
| user_add_email(lib,address); | ||
| } | ||
| } | ||
| break; | ||
| } | ||
| } | ||
| } | ||
|
|
||
| void lib_save(struct Lib *lib){ | ||
| FILE *file; | ||
| while(1){ | ||
| if((file=fopen(filename,"w"))!=NULL){break;} | ||
| else{printf("Fail to open.\n");} | ||
| } | ||
| for(int i=0;i<10000;i++){ | ||
| if(lib->users[i].exist==1){ | ||
| fputc('0',file); | ||
| fputc('0'+(i%10000)/1000,file); | ||
| fputc('0'+(i%1000)/100,file); | ||
| fputc('0'+(i%100)/10,file); | ||
| fputc('0'+i%10,file); | ||
| for(int dig=0;dig<11;dig++){ | ||
| fputc(lib->users[i].phone[dig],file); | ||
| } fputc(0,file);fputc(10,file); | ||
| fputc(49,file); | ||
| for(int dig=0;dig<strlen(lib->users[i].name)+1;dig++){ | ||
| fputc(lib->users[i].name[dig],file); | ||
| } fputc(10,file); | ||
| for(int dig=0;dig<strlen(lib->users[i].email)+1;dig++){ | ||
| fputc(lib->users[i].email[dig],file); | ||
| } fputc(10,file); | ||
| for(int dig=0;dig<strlen(lib->users[i].address)+1;dig++){ | ||
| fputc(lib->users[i].address[dig],file); | ||
| } fputc(10,file); | ||
| fputc(35,file);fputc(10,file); | ||
| } | ||
| } | ||
| } | ||
|
|
||
| void display1(){ | ||
| char cmd[200]; | ||
| int d; | ||
| struct Lib *lib=init_lib(); | ||
| while(1){ | ||
| printf("Please input your command:\n"); | ||
| scanf("%s",cmd); | ||
| if(cmd[0]=='1'){//输出所有内容 | ||
| print_all(lib); | ||
| }else if(cmd[0]=='2'){ | ||
| printf("help!help!help!\n"); | ||
| }else if(cmd[0]=='3'){ | ||
| lib_save(lib); | ||
| }else if(cmd[0]=='4'){ | ||
| lib_load(lib); | ||
| }else if(cmd[0]=='.'){ | ||
| if(cmd[1]='c'){ | ||
| char name[100]; | ||
| printf("name!\n"); | ||
| scanf("%s",name); | ||
| user_add_name(lib,name); | ||
| }else if(cmd[1]=='s'){ | ||
| lib_save(lib); | ||
| }else if(cmd[1]=='d'){ | ||
| printf("tell me which you want to delete?\n"); | ||
| scanf("%d",&d); | ||
| lib->users[d]; | ||
| }else if(cmd[1]=='r'){ | ||
| lib_load(lib); | ||
| }else if(cmd[1]=='p'){ | ||
| print_all(lib); | ||
| }else if(cmd[1]=='q'){ | ||
| if(cmd[2]=='1'){ | ||
| }else if(cmd[2]=='2'){ | ||
| }else if(cmd[2]=='3'){ | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
|
|
||
|
|
||
| int main(){ | ||
| display1(); | ||
| return 0; | ||
| } | ||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
| @@ -0,0 +1,315 @@ | ||
| #include<stdio.h> | ||
| #include<stdlib.h> | ||
| #include<string.h> | ||
| #include<math.h> | ||
| #define Len 1000 | ||
| #define isTest 1 | ||
|
|
||
|
|
||
| typedef struct { | ||
| int *con,len,sig; //sig=1 -> 正数 sig=0 -> 负数 | ||
| }Num; | ||
|
|
||
| typedef struct { | ||
| Num *nums; | ||
| int *sig; //[0]代表运算种类,[1]代表较大数位置 | ||
| Num *res; | ||
| }Pro; | ||
|
|
||
| int power(int a,int x){ | ||
| int res=1; | ||
| for(int i=0;i<x;i++){ | ||
| res*=a; | ||
| } | ||
| return res; | ||
| } | ||
|
|
||
| int bigger(Num *num1,Num *num2){ | ||
| if(num1->sig>0&&num2->sig<0){return 1;} | ||
| else if(num1->sig<0&&num2->sig>0){return 2;} | ||
| else{ | ||
| int tig=num1->sig; | ||
| for(int digit=Len-1;digit>=0;digit--){ | ||
| if(num1->con[digit]>num2->con[digit]){ | ||
| return tig?1:2; | ||
| }else if(num1->con[digit]<num2->con[digit]){ | ||
| return tig?2:1; | ||
| }else if(digit==0){ return 0; } | ||
| } | ||
| } | ||
| } | ||
|
|
||
|
|
||
| //比较两个num绝对值的大小。 | ||
| int num_abs_compare(Num *num1,Num *num2){ | ||
| for(int digit=Len-1;digit>=0;digit--){ | ||
| if(num1->con[digit]>num2->con[digit]){ | ||
| return 1; | ||
| }else if(num2->con[digit]<num2->con[digit]){ | ||
| return 2; | ||
| }else if(digit==0){ | ||
| return 0; | ||
| } | ||
| } | ||
| } | ||
|
|
||
| //比较两个num真实值的大小。 | ||
| int num_compare(Num *num1,Num *num2){ | ||
| if(num1->sig>0&&num2->sig<0){ | ||
| return 1; | ||
| }else if(num1->sig<0&&num2->sig>0){ | ||
| return 2; | ||
| }else if(num1->sig>0&&num2->sig>0){ | ||
| return num_abs_compare(num1,num2); | ||
| }else if(num1->sig<0&&num2->sig<0){ | ||
| return num_abs_compare(num2,num1); | ||
| } | ||
| } | ||
|
|
||
| //比较num和0的大小。 | ||
| int num_comto_zero(Num *num){ | ||
| for(int digit=0;digit<Len;digit++){ | ||
| if(num->con[digit]==0){ | ||
| break; | ||
| }else if(digit==Len-1){ | ||
| return 0; | ||
| } | ||
| } | ||
| if(num->sig){ | ||
| return 1; | ||
| }else{ | ||
| return -1; | ||
| } | ||
| } | ||
|
|
||
| //将字符串转为Num对象。 | ||
| Num *str_to_Num(char *str){ | ||
| Num *num=(Num*)calloc(1,sizeof(Num)); //分配num空间,初始化对象 | ||
| num->con=(int*)calloc(Len,sizeof(int)); //分配num.con的空间 | ||
| num->len=strlen(str); //获取字符串的长度 | ||
| if(str[0]=='-'){ //获取num应有正负值,并对长度做修正。 | ||
| num->sig=0; | ||
| num->len-=1; | ||
| }else{ | ||
| num->sig=1; | ||
| } | ||
| for(int digit=0;digit<Len;digit++){ //将字符串主体写入num.con中 | ||
| if(digit<num->len){ | ||
| num->con[digit]=str[num->len-num->sig-digit]-'0'; | ||
| }else { | ||
| num->con[digit]=0; | ||
| } | ||
| } | ||
| if(num_comto_zero(num)!=-1){num->sig=1;} | ||
| return num; | ||
| } | ||
|
|
||
| //将Num对象转为字符串。 | ||
| char *Num_to_str(Num *tar){ | ||
| char *res=(char*)calloc(Len,sizeof(char)); //分配字符串空间,初始化对象 | ||
| int digit=0; //初始化数位 | ||
| if(tar->sig==0){ //判断并执行写入符号位 | ||
| res[digit++]='-'; | ||
| } | ||
| for(int dig1=tar->len-1;dig1>=0;dig1--){ //将num.con写入字符串中 | ||
| res[digit++]=tar->con[dig1]+'0'; | ||
| } | ||
| return res; | ||
| } | ||
|
|
||
| //将int对象转化为Num对象。 | ||
| Num *int_to_Num(int tar){ | ||
| int digit=0; | ||
| Num *num=(Num*)calloc(1,sizeof(Num)); | ||
| num->con=(int*)calloc(Len,sizeof(Num)); | ||
| if(tar<0){num->sig=0;} | ||
| else{num->sig=1;} | ||
| for(digit=0;tar>0;digit++){ | ||
| num->con[digit]=tar%10; | ||
| tar/=10; | ||
| } | ||
| num->len=digit; | ||
| return num; | ||
| } | ||
|
|
||
| //将Num对象转化为int对象(可能会爆表)。 | ||
| int Num_to_int(Num *num){ | ||
| int tar=0; | ||
| for(int digit=0;digit<Len;digit++){ | ||
| tar+=num->con[digit]*power(10,digit); | ||
| } | ||
| tar*=num->sig=1?1:-1; | ||
| return tar; | ||
| } | ||
|
|
||
| //初始化pro对象 | ||
| Pro *pro_creat(int sig){ | ||
| Pro *pro=(Pro*)calloc(1,sizeof(Pro)); //分配pro空间 | ||
| pro->sig=(int*)calloc(2,sizeof(int)); //分配并写入运算类型 | ||
| pro->sig[0]=sig; | ||
| pro->nums=(Num*)calloc(2,sizeof(Num)); //分配运算对象空间 | ||
| pro->nums[0].con=(int*)calloc(Len,sizeof(int)); | ||
| pro->nums[1].con=(int*)calloc(Len,sizeof(int)); | ||
| pro->res=(Num*)calloc(sig!=3?1:2,sizeof(Num)); //分配运算结果的空间 | ||
| pro->res[0].con=(int*)calloc(Len,sizeof(int)); | ||
| if(sig==3){pro->res[1].con=(int*)calloc(Len,sizeof(int));} //如果是除法,给余数分配空间 | ||
| return pro; | ||
| } | ||
|
|
||
| //将num对象写入pro中。 | ||
| void Num_to_pro(Pro *pro,Num *num,int dig){ | ||
| pro->nums[dig]=*num; | ||
| } | ||
|
|
||
| //pro的正式运算 | ||
| void pro_start(Pro *pro){ | ||
| int bi,sm; | ||
| pro->sig[1]=num_abs_compare(pro->nums,pro->nums+1); | ||
| if(pro->sig[0]<2){ | ||
| if(pro->sig[0]!=(pro->nums[0].sig*pro->nums[1].sig)){ | ||
| //ba_add(pro->nums[0],pro->nums[1]); | ||
| //printf("开始加法。对象为%s和%s\n",Num_to_str(pro->nums),Num_to_str(pro->nums+1)); | ||
| // pro->res=str_to_Num("3999"); | ||
| int tig=0; | ||
| for(int digit=0;digit<Len;digit++){ | ||
| pro->res->con[digit]=pro->nums[0].con[digit]+pro->nums[1].con[digit]+tig; | ||
| //printf("%d",pro->res->con[digit]); | ||
| if(pro->res->con[digit]>9){ | ||
| pro->res->con[digit]-=10; | ||
| tig=1; | ||
| }else{tig=0;} | ||
| } | ||
| if(tig==1){printf("数据过大溢出,请调整Len值后重新编译运行!\n");} | ||
| pro->res->sig=pro->nums->sig; | ||
| pro->res->len=(pro->sig[1]==1)?pro->nums[0].len:pro->nums[1].len; | ||
| }else{ | ||
| //ba_dec(pro->nums[0],pro->nums[1]); | ||
| //printf("开始减法。对象为%s和%s\n",Num_to_str(pro->nums),Num_to_str(pro->nums+1)); | ||
| if(pro->sig[1]==0){ | ||
| pro->res=str_to_Num("0"); | ||
| }else{ | ||
| if(pro->sig[1]==1){ | ||
| bi=0,sm=1; | ||
| pro->res->sig=pro->nums->sig; | ||
| }else if(pro->sig[1]==2){ | ||
| bi=1,sm=0; | ||
| pro->res->sig=pro->nums->sig==1?0:1; | ||
| } | ||
| for(int digit=0,tig=0;digit<Len;digit++){ | ||
| pro->res->con[digit]=pro->nums[bi].con[digit]-pro->nums[sm].con[digit]-tig; | ||
| if(pro->res->con[digit]<0){ | ||
| pro->res->con[digit]+=10; | ||
| tig=1; | ||
| }else{ | ||
| tig=0; | ||
| } | ||
| } | ||
| int len=0; | ||
| for(len=Len;pro->res->con[len-1]==0;len--){} | ||
| pro->res->len=len; | ||
| } | ||
| } | ||
| }else if (pro->sig[0]==2){ | ||
| printf("开始乘法"); | ||
| if(pro->nums[0].sig==pro->nums[1].sig){ | ||
| pro->res->sig=1; | ||
| }else{pro->res->sig=0;} | ||
| for(int a=0;a<Len;a++){ | ||
| pro->res->con[a]=0; | ||
| } | ||
| for(int a=0;a<Len;a++){ | ||
| for(int b=0;b<Len;b++){ | ||
| int mid=0;int tig=a+b; | ||
| pro->res->con[tig]+=pro->nums[0].con[a]*pro->nums[1].con[b]; | ||
| while(pro->res->con[tig]>9){ | ||
| mid=pro->res->con[tig]/10; | ||
| pro->res->con[tig]%=10; | ||
| pro->res->con[++tig]+=mid; | ||
| } | ||
| } | ||
| } | ||
| int len=0; | ||
| for(len=Len;pro->res->con[len-1]==0;len--){} | ||
| pro->res->len=len; | ||
| }else if (pro->sig[0]==3){ | ||
| printf("开始除法"); | ||
| Num *b1,*b2; | ||
| int mid,n; | ||
| b1=str_to_Num(Num_to_str(pro->nums[0])); | ||
| b2=str_to_Num("0"); | ||
| for(int digit=pro->num[0].len-pro->num[1].len;digit>=0;digit--){ | ||
| for(int dig=digit;digit<b1->len;digit--){ | ||
| b2->con[dig]=b1->con[dig]; | ||
| b1->con[dig]=0; | ||
| } | ||
| for(len=Len;b1[len-1]==0;len--){} | ||
| b1->len=len; | ||
| for(len=Len;b2[len-1]==0;len--){} | ||
| b2->len=len; | ||
| for(pro->res[0].con[dig]=0;num_compare(b2,pro->nums[1])==1;pro->res[0].con[dig]++){ | ||
| Pro cal=pro_creat(1); | ||
| Num_to_pro(cal,b2,0); | ||
| Num_to_pro(cal,pro->nums+1,1); | ||
| pro_start(cal); | ||
| } | ||
| for(int dig=digit;digit<b1->len;digit--){ | ||
|
|
||
| } | ||
| } | ||
| } | ||
|
|
||
| void test6(){ | ||
|
|
||
| } | ||
|
|
||
| void test5(){ | ||
| // for(int a=0;a<1000;a++){ | ||
| // for(int b=0;b<1000;b++){ | ||
| int a=11;int b=1100; | ||
| Pro *pro=pro_creat(2); | ||
| Num_to_pro(pro,int_to_Num(a),0); | ||
| Num_to_pro(pro,int_to_Num(b),1); | ||
| pro_start(pro); | ||
| printf("%d * %d = %s\n",a,b,Num_to_str(pro->res)); | ||
| // }} | ||
| } | ||
|
|
||
| void test4(){ | ||
| printf("1000 is %s\n",Num_to_str(int_to_Num(1000))); | ||
| printf("1000 is %d\n",Num_to_int(str_to_Num("1000"))); | ||
| } | ||
|
|
||
| void test3(){ | ||
| char *one="1000"; | ||
| char *two="1"; | ||
| Pro *pro=pro_creat(1); | ||
| Num_to_pro(pro,str_to_Num(one),0); | ||
| Num_to_pro(pro,str_to_Num(two),1); | ||
| pro_start(pro); | ||
| printf("%s\n",Num_to_str(pro->res)); | ||
| } | ||
|
|
||
| void test2(){ | ||
| char *num_char="-1000000000000031415926"; | ||
| Num *num=str_to_Num(num_char); | ||
| printf("%s\n",Num_to_str(num)); | ||
|
|
||
| } | ||
|
|
||
|
|
||
|
|
||
| void test1(){ | ||
| int length=100; | ||
| Num *num=(Num*)calloc(1,sizeof(Num)); | ||
| num->sig=1; | ||
| num->con=(int*)calloc(Len,sizeof(int)); | ||
| for(int digit=0;digit<length;digit++){ | ||
| num->con[digit]=9; | ||
| } num->len=length; | ||
| printf("%s\n",Num_to_str(num)); | ||
| } | ||
|
|
||
| int main(){ | ||
| test5(); | ||
| return 0; | ||
| } |
| @@ -0,0 +1,124 @@ | ||
| #include<stdio.h> | ||
| #include<stdlib.h> | ||
| #include<string.h> | ||
| #define isTest 1 | ||
| struct para_cal{ | ||
| char *con; | ||
| int cen[128],words[26]; | ||
| int len; | ||
| }; | ||
|
|
||
| struct para_cal *init_para(char *parag){ | ||
| struct para_cal *para=(struct para_cal*)calloc(1,sizeof(struct para_cal)); | ||
| para->len=strlen(parag); | ||
| para->con=(char*)calloc(para->len,sizeof(char)); | ||
| for(int i=0;i<para->len;i++){ | ||
| para->con[i]=parag[i]; | ||
| } | ||
| return para; | ||
| } | ||
|
|
||
| int char_cen(struct para_cal *para){ | ||
| para->len=strlen(para->con); | ||
| for(int i=0;i<128;i++){para->cen[i]=0;} | ||
| for(int digit=0;digit<para->len;digit++){ | ||
| if(para->con[digit]>127||para->con[digit]<0){ | ||
| printf("please input right words,be sure they are Ascii!\n"); | ||
| return 1; | ||
| } | ||
| para->cen[para->con[digit]]++; | ||
| } | ||
| for(int i=0;i<26;i++){ | ||
| para->words[i]=para->cen[64+i]+para->cen[97+i]; | ||
| } | ||
| return 0; | ||
| } | ||
|
|
||
| void print_words_cen(struct para_cal *para){ | ||
| char *out=(char*)calloc(para->len+1,sizeof(char)); | ||
| for(int i=0;i<26;i++){ | ||
| printf("%c %d \n",i+65,para->words[i]); | ||
| } | ||
| } | ||
|
|
||
| void print_word(char *p,int len){ | ||
| char *i=(char*)calloc(len+1,sizeof(char)); | ||
| for(int m=0;m<len;m++){ | ||
| i[m]=p[m]; | ||
| } i[len]='\0'; | ||
| printf("%d\t%s\n",len,i); | ||
| } | ||
|
|
||
| char *search_replace(char *para,char *sea,char *tar){ | ||
| int len1=strlen(para); | ||
| int len2=strlen(sea); | ||
| int len3=strlen(tar); | ||
| printf("%d %d %d \n",len1,len2,len3); | ||
| char *one,*two,*the,*sto,*res; | ||
| sto=(char*)calloc(len1,sizeof(char)); | ||
| for(int i=0;i<len1;i++){ | ||
| sto[i]=para[i]; | ||
| } if(isTest==1){print_word(sto,len1);} | ||
| for(int digit=0;digit<len1-len2+1;printf("digit:%d\n",++digit)){ | ||
| int dig=0; | ||
| for(dig=0;dig<len2;dig++){ | ||
| if(sto[digit+dig]!=sea[dig]){break;} | ||
| } if(dig==len2){ | ||
|
|
||
| one=(char*)calloc(digit,sizeof(char)); | ||
| for(dig=0;dig<digit;dig++){ | ||
| one[dig]=sto[dig]; | ||
| } if(isTest==1){print_word(one,digit);} | ||
|
|
||
| two=(char*)calloc(len3,sizeof(char)); | ||
| for(dig=0;dig<len3;dig++){ | ||
| two[dig]=tar[dig]; | ||
| } if(isTest==1){print_word(two,len3);} | ||
|
|
||
| the=(char*)calloc(len1-digit-len2,sizeof(char)); | ||
| for(dig=0;dig<len1-digit-len2;dig++){ | ||
| the[dig]=sto[digit+len2+dig]; | ||
| } if(isTest==1){print_word(the,len1-digit-len2);} | ||
|
|
||
| res=(char*)calloc(len1+len3-len2+1,sizeof(char)); | ||
| for(int i=0;i<len1+len3-len2+1;i++){ | ||
| if(i<digit){ | ||
| res[i]=sto[i]; | ||
| }else if(i<digit+len3){ | ||
| res[i]=tar[i-digit]; | ||
| }else { | ||
| res[i]=the[i-len3-digit]; | ||
| } | ||
| } res[len1+len3-len2]='\0'; | ||
| printf("%s\n",res); | ||
| } | ||
| } | ||
| return res; | ||
| } | ||
|
|
||
| void file_save(char *artical,char *name){ | ||
| FILE *file=fopen(name,"w"); | ||
| for(int i=0;artical[i]!='\0';i++){ | ||
| fputc(artical[i],file); | ||
| } | ||
| fclose(file); | ||
| } | ||
|
|
||
| void display1(){ | ||
| char artical[100]="hello world!"; | ||
| struct para_cal *pro=init_para(artical); | ||
| char_cen(pro); | ||
| print_words_cen(pro); | ||
| } | ||
|
|
||
| void display2(){ | ||
| char artical[100]="111111222111"; | ||
| char *res=search_replace(artical,"222","333"); | ||
| printf("%s\n",res); | ||
| char name[10]="date.txt"; | ||
| file_save(artical,name); | ||
| } | ||
| int main(){ | ||
| display2(); | ||
| return 0; | ||
| } |
| @@ -0,0 +1,21 @@ | ||
| #include<stdio.h> | ||
| void strcpy(char *in,char *out){ | ||
| for(int i=0;in[i-1]!='\0';i++){ | ||
| out[i]=in[i]; | ||
| } | ||
| } | ||
| int strcmp(char *one,char *two){ | ||
| int tig1=1,tig2=1; | ||
| for(int i=0;tig1||tig2;i++){ | ||
| if(one[i]>two[i]){ | ||
| return 1; | ||
| }else if(two[i]>one[i]){ | ||
| return -1; | ||
| } | ||
| } | ||
| return 0; | ||
| } | ||
|
|
||
| int main(){ | ||
| return 0; | ||
| } |
| @@ -0,0 +1,133 @@ | ||
| #include<stdio.h> | ||
| #include<stdlib.h> | ||
| #include<string.h> | ||
| #define isTest 0 | ||
| struct para_cal{ | ||
| char *con; | ||
| int cen[128],words[26]; | ||
| int len; | ||
| }; | ||
|
|
||
| struct para_cal *init_para(char *parag){ | ||
| struct para_cal *para=(struct para_cal*)calloc(1,sizeof(struct para_cal)); | ||
| para->len=strlen(parag); | ||
| para->con=(char*)calloc(para->len,sizeof(char)); | ||
| for(int i=0;i<para->len;i++){ | ||
| para->con[i]=parag[i]; | ||
| } | ||
| return para; | ||
| } | ||
|
|
||
| int char_cen(struct para_cal *para){ | ||
| para->len=strlen(para->con); | ||
| for(int i=0;i<128;i++){para->cen[i]=0;} | ||
| for(int digit=0;digit<para->len;digit++){ | ||
| if(para->con[digit]>127||para->con[digit]<0){ | ||
| printf("please input right words,be sure they are Ascii!\n"); | ||
| return 1; | ||
| } | ||
| para->cen[para->con[digit]]++; | ||
| } | ||
| for(int i=0;i<26;i++){ | ||
| para->words[i]=para->cen[64+i]+para->cen[97+i]; | ||
| } | ||
| return 0; | ||
| } | ||
|
|
||
| void print_words_cen(struct para_cal *para){ | ||
| char *out=(char*)calloc(para->len+1,sizeof(char)); | ||
| for(int i=0;i<26;i++){ | ||
| printf("%c %d \n",i+65,para->words[i]); | ||
| } | ||
| } | ||
|
|
||
| void print_word(char *p,int len){ | ||
| char *i=(char*)calloc(len+1,sizeof(char)); | ||
| for(int m=0;m<len;m++){ | ||
| i[m]=p[m]; | ||
| } i[len]='\0'; | ||
| printf("%d\t%s\n",len,i); | ||
| } | ||
|
|
||
| char *search_replace(char *para,char *sea,char *tar){ | ||
| int len1=strlen(para); | ||
| int len2=strlen(sea); | ||
| int len3=strlen(tar); | ||
| if(isTest){printf("%d %d %d \n",len1,len2,len3);} | ||
| char *one,*two,*the,*sto,*res; | ||
| sto=(char*)calloc(len1,sizeof(char)); | ||
| for(int i=0;i<len1;i++){ | ||
| sto[i]=para[i]; | ||
| } if(isTest==1){print_word(sto,len1);} | ||
| for(int digit=0;digit<len1-len2+1;++digit){ | ||
| int dig=0; | ||
| for(dig=0;dig<len2;dig++){ | ||
| if(sto[digit+dig]!=sea[dig]){break;} | ||
| } if(dig==len2){ | ||
|
|
||
| one=(char*)calloc(digit,sizeof(char)); | ||
| for(dig=0;dig<digit;dig++){ | ||
| one[dig]=sto[dig]; | ||
| } if(isTest==1){print_word(one,digit);} | ||
|
|
||
| two=(char*)calloc(len3,sizeof(char)); | ||
| for(dig=0;dig<len3;dig++){ | ||
| two[dig]=tar[dig]; | ||
| } if(isTest==1){print_word(two,len3);} | ||
|
|
||
| the=(char*)calloc(len1-digit-len2,sizeof(char)); | ||
| for(dig=0;dig<len1-digit-len2;dig++){ | ||
| the[dig]=sto[digit+len2+dig]; | ||
| } if(isTest==1){print_word(the,len1-digit-len2);} | ||
|
|
||
| res=(char*)calloc(len1+len3-len2+1,sizeof(char)); | ||
| for(int i=0;i<len1+len3-len2+1;i++){ | ||
| if(i<digit){ | ||
| res[i]=sto[i]; | ||
| }else if(i<digit+len3){ | ||
| res[i]=tar[i-digit]; | ||
| }else { | ||
| res[i]=the[i-len3-digit]; | ||
| } | ||
| } res[len1+len3-len2]='\0'; | ||
| if(isTest){printf("%s\n",res);} | ||
| } | ||
| } | ||
| return res; | ||
| } | ||
|
|
||
| void file_save(char *artical,char *name){ | ||
| FILE *file=fopen(name,"w"); | ||
| for(int i=0;artical[i]!='\0';i++){ | ||
| fputc(artical[i],file); | ||
| } | ||
| fclose(file); | ||
| } | ||
|
|
||
| void display1(){ | ||
| char artical[100]="hello world!"; | ||
| struct para_cal *pro=init_para(artical); | ||
| char_cen(pro); | ||
| printf("word:%s\n",artical); | ||
| print_words_cen(pro); | ||
| } | ||
|
|
||
| void display2(){ | ||
| char artical[100]="111111222111"; | ||
| char tore[100]="333"; | ||
| char bere[100]="222"; | ||
| printf("the sentence before:\n\"%s\"\n",artical); | ||
| printf("Want the \"%s\" to be replaced as \"%s\"\n",bere,tore); | ||
| char *res=search_replace(artical,bere,tore); | ||
| printf("%s\n",res); | ||
| char name[10]="date.txt"; | ||
| printf("save file as %s\n",name); | ||
| file_save(artical,name); | ||
| } | ||
| int main(){ | ||
| printf("display1:\n"); | ||
| display1(); | ||
| printf("display2:\n"); | ||
| display2(); | ||
| return 0; | ||
| } |
| @@ -0,0 +1,137 @@ | ||
| #include<stdio.h> | ||
| #include<stdlib.h> | ||
| #include<string.h> | ||
| #define isTest 0 | ||
| struct context{ | ||
| int stat; //1:句前空格 | ||
| //2:句中 | ||
| //3:句中空格1 | ||
| //4:句中空格2(多余) | ||
| char *sentence; | ||
| int len; | ||
| }; | ||
|
|
||
| struct cen{ | ||
| char *sen; | ||
| char *word; | ||
| int cen; | ||
| }; | ||
|
|
||
| struct context *init(char *insen){ | ||
| struct context *con=(struct context*)calloc(1,sizeof(struct context)); | ||
| con->sentence=insen; | ||
| con->stat=1; | ||
| return con; | ||
| } | ||
|
|
||
| void process(struct context *con){ | ||
| int dig=0; | ||
| con->len=strlen(con->sentence); | ||
| if(isTest==1){printf("len: %d\n",con->len);} | ||
| int tig,digit; | ||
| for(digit=0,tig=0;digit<con->len+1&&tig==0;){ | ||
| if(isTest==1){printf("%d %d '%c'\n",con->stat,digit,con->sentence[digit]);} | ||
| switch (con->stat){ | ||
| case 1://初始状态 | ||
| if(con->sentence[digit]==32){ | ||
| if(isTest==1){printf("1~1\n");} | ||
| for(dig=digit;dig<con->len-1;dig++){ | ||
| con->sentence[dig]=con->sentence[dig+1]; | ||
| if(isTest==1){printf("$$$%d-%d:'%c'\n",dig,con->len,con->sentence[dig]);} | ||
| } con->sentence[dig]='\0'; | ||
| if(isTest==1){printf("$$$\n");} | ||
| con->len=strlen(con->sentence); | ||
| if(isTest==1){printf("$$$\n");} | ||
| }else{ | ||
| if(isTest==1){printf("1~2\n");} | ||
| con->stat=2; | ||
| digit++; | ||
| } | ||
| break; | ||
| case 2://句中 | ||
| if(con->sentence[digit]==32){ | ||
| if(isTest==1){printf("2~1\n");} | ||
| con->stat=3; | ||
| digit++; | ||
| }else if(con->sentence[digit]=='\0'){ | ||
| if(isTest==1){printf("2~2\n");} | ||
| tig=1; | ||
| }else{ | ||
| if(isTest==1){printf("2~3\n");} | ||
| digit++; | ||
| } | ||
| break; | ||
| case 3://句中空格 | ||
| if(con->sentence[digit]==32){ | ||
| if(isTest==1){printf("3~1\n");} | ||
| for(dig=digit;dig<con->len-1;dig++){ | ||
| con->sentence[dig]=con->sentence[dig+1]; | ||
| if(isTest==1){printf("$$$%d-%d:'%c'\n",dig,con->len,con->sentence[dig]);} | ||
| } con->sentence[dig]='\0'; | ||
| con->len=strlen(con->sentence); | ||
| }else if(con->sentence[digit]=='\0'){ | ||
| if(isTest==1){printf("3~2\n");} | ||
| con->sentence[digit-1]='\0'; | ||
| tig=1; | ||
| }else { | ||
| if(isTest==1){printf("3~3\n");} | ||
| con->stat=2; | ||
| digit++; | ||
| } | ||
| } | ||
| } | ||
| } | ||
|
|
||
| struct cen *ce(char *sen,char *word){ | ||
| struct cen *ce=(struct cen*)calloc(1,sizeof(struct cen)); | ||
| ce->sen=sen; | ||
| ce->word=word; | ||
| ce->cen=0; | ||
| return ce; | ||
| } | ||
|
|
||
| struct cen *sen_cen(struct cen *ce){ | ||
| int len=strlen(ce->sen); | ||
| int len2=strlen(ce->word); | ||
| for(int digit=0;digit<len;digit++){ | ||
| if(isTest==1){printf("sss %d \n",digit);} | ||
| if(digit==0||(digit>0&&ce->sen[digit-1]==32)){ | ||
| for(int dig=0;dig<len2;dig++){ | ||
| if(isTest==1){printf("ooo %d -- %d--%d\n",digit,dig,len2);} | ||
| if(ce->sen[digit+dig]!=ce->word[dig]){ | ||
| if(isTest==1){printf("different\n");} | ||
| break; | ||
| } | ||
| if(dig==len2-1&&ce->sen[digit+dig+1]==32){ | ||
| ce->cen++; | ||
| } | ||
| }} | ||
| } | ||
| return ce; | ||
| } | ||
|
|
||
| void display1(){ | ||
| char sen[100]=" hello ! @ "; | ||
| process(init(sen)); | ||
| printf("%s\n",sen); | ||
| for(int i=0;i<strlen(sen);i++){ | ||
| printf("-%d",sen[i]); | ||
| } printf("\n"); | ||
| } | ||
|
|
||
| void display2(){ | ||
| char sen[100]=" hello11 hello iihello hello world! "; | ||
| char word[100]="hello"; | ||
| struct cen *ce1=sen_cen(ce(sen,word)); | ||
| printf("The sentence you put in is :\n\"%s\"\n",sen); | ||
| printf("The word you want to search is \"%s\"\n",word); | ||
| //printf("%s in %s :%d\n",ce1->word,ce1->sen,ce1->cen ); | ||
| printf("There are : %d \n",ce1->cen); | ||
| process(init(sen)); | ||
| printf("After process , the sentence came in to :\n\"%s\"\n",sen); | ||
| } | ||
|
|
||
| int main(){ | ||
| display2(); | ||
| return 0; | ||
| } |