字符串与大数比较

来源:互联网 发布:云视通监控软件下载 编辑:程序博客网 时间:2024/05/17 03:11

字符串与大数比较,有两中思路,

第一:将字符串转成对应进制的数字,然后比较两个数的大小

第二:将数字转化成对应的字符串,然后进行比较

如果这个数在系统表示范围之内,将字符串转换成数字比较比较方便,如果这个数字太大,则转化成字符串进行比较比较合适。


下面这段代码是将一个大数转化成字符串进行比较,一般用不到,所以先记下来:

#include <stdio.h>#include <string.h>#define MAX_LEN 32int 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, 0, sizeof(str_source));strcpy(str_source,tmp);//printf("str_source:%s, strelen(str_source):%d",str_source ,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:%d\n",revstr, length);for(i=length-1;i>=0;i--)   {   //printf("revstr[%d]=%c\n",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:%llu\n",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;}


0 0
原创粉丝点击