字符串与大数比较
发布时间:2020-12-14 02:22:37 所属栏目:大数据 来源:网络整理
导读:字符串与大数比较,有两中思路, 第一:将字符串转成对应进制的数字,然后比较两个数的大小 第二:将数字转化成对应的字符串,然后进行比较 如果这个数在系统表示范围之内,将字符串转换成数字比较比较方便,如果这个数字太大,则转化成字符串进行比较比较合
字符串与大数比较,有两中思路, 第一:将字符串转成对应进制的数字,然后比较两个数的大小 第二:将数字转化成对应的字符串,然后进行比较 如果这个数在系统表示范围之内,将字符串转换成数字比较比较方便,如果这个数字太大,则转化成字符串进行比较比较合适。 下面这段代码是将一个大数转化成字符串进行比较,一般用不到,所以先记下来: #include <stdio.h> #include <string.h> #define MAX_LEN 32 int Compare_str(char *stb_str,char *start_str) { int is_large_than_start = 0; int i=0,length_stb = 0,length_start = 0; char ch_stb,ch_start; length_stb = strlen(stb_str); length_start = strlen(start_str); //先比较长度,如果长度不相等,再逐位比较 if(length_stb<length_start) { is_large_than_start = 0; } else if(length_stb>length_start) { is_large_than_start = 1; } else if(length_stb=length_start) { for(i=0;i<length_stb;i++) { ch_stb = stb_str[i]; ch_start = start_str[i]; if((int)ch_stb<(int)ch_start) { is_large_than_start = 0; break; } else if((int)ch_stb>(int)ch_start) { is_large_than_start = 1; break; } } if(i>=length_stb) { is_large_than_start = 1; } } return is_large_than_start; } void Delete_left_zero_from_str(char * str_source) { int i =0,count = 0; char tmp[MAX_LEN]={0}; //printf("str_source:%s,strelen(str_source):%d",str_source,strlen(str_source)); for(i=0,count=0;i<strlen(str_source);i++) { if(str_source[i]=='0') { count++; } else { break; } } //printf("count:%d",count); strcpy(tmp,str_source+count); memset(str_source,sizeof(str_source)); strcpy(str_source,tmp); //printf("str_source:%s,strlen(str_source)); } unsigned long long ChangeNum(char *str,int base) { char revstr[MAX_LEN]={0}; //根据十六进制字符串的长度,这里注意数组不要越界 int num[MAX_LEN]={0}; unsigned long long count=1,result=0; int length = 0,i = 0; length = strlen(str); if(length>MAX_LEN) { printf("space err"); return 0; } strcpy(revstr,str); //printf("revstr:%s length:%dn",revstr,length); for(i=length-1;i>=0;i--) { //printf("revstr[%d]=%cn",i,revstr[i]); if ((revstr[i]>='0') && (revstr[i]<='9')) { num[i]=revstr[i]-48;//字符0的ASCII值为48 } else if ((revstr[i]>='a') && (revstr[i]<='f')) { num[i]=revstr[i]-'a'+10; } else if ((revstr[i]>='A') && (revstr[i]<='F')) { num[i]=revstr[i]-'A'+10; } else { num[i]=0; } result=result+num[i]*count; count=count*base;//十六进制(如果是八进制就在这里乘以8) } //printf("result:%llun",result); return result; } int main() { //假设tmp_str就是源字符串。 unsigned long long tmp_num = 0; char stb_str[MAX_LEN]="10208889999999998"; char tmp_str[MAX_LEN]="2444EE6E0043FF",src_str[MAX_LEN]={0}; //把接收到的16进制序列号转成10进制字符串, tmp_num = ChangeNum(tmp_str,16); memset(src_str,0x00,src_str(src_str)); sprintf(src_str,"%lld",tmp_num); //如果左边有0,则去掉无效位 Delete_left_zero_from_str(src_str); if(Compare_str(stb_str,src_str)) { printf("stb_str > src_str n"); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |