字符串与大数比较
来源:互联网 发布:云视通监控软件下载 编辑:程序博客网 时间: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
- 字符串与大数比较
- 大数的四则运算与比较
- HDU 1316 How Many Fibs?(大数+字符串数字比较)
- CodeForces 616A 大数的比较 字符串的使用
- poj 2413 How many Fibs? 大数累加模板+字符串模拟大数比较大小
- perl 字符串比较与证书比较
- Shell中的整数与字符串比较比较
- 字符串比较与运算符
- 数字与字符串的比较
- c++ 枚举与字符串 比较
- 页面与后台字符串比较
- 字符串与枚举 比较区别
- 汇编语言字符串比较与查找
- 宽字符串与字符串比较函数
- 字符串长度的计算与字符串比较
- 大数乘法,大数×大数字符串版
- 大数比较大小
- C - L1(大数比较)
- 14. jQuery - 添加元素
- Error : loadNamespace()里算'rJava'时.onLoad失败了
- PHP如何关闭notice级别的错误提示
- ibatis 调用存储过程
- Thread 1: EXC_BAD_ACCESS
- 字符串与大数比较
- OC之OC的类
- 解决VS2010编译工程速度慢的问题
- 利用css3中的after和content制作简单的tooltip
- Date时间类型的变量比较方法
- POJ_2385 Apple Catching(DP)
- 关于仿射变换和透视变换的终极解释
- Git的基本使用
- git config配置文件