当前位置:首页 > 大全 >

c语言double溢出(c语言中浮点数溢出判断)

来源:原点资讯(www.yd166.com)时间:2022-12-25 20:54:06作者:YD166手机阅读>>

c语言double溢出,c语言中浮点数溢出判断(1)

c语言double溢出,c语言中浮点数溢出判断(2)

以上数据溢出无法比较

数字比较跟字符串比较是有差别的,不能直接strcmp完事了。

数字比较主要考虑是数字对齐

下面是算法比较

支持很长很长大大数串

c语言double溢出,c语言中浮点数溢出判断(3)

c语言double溢出,c语言中浮点数溢出判断(4)

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#include<ctype.h>

int s1_compare_s2(char *s1, char *s2);

int main(int argc, char **argv)

{

char s1[10000] = { '\0' };

char s2[10000] = { '\0' };

lebel:

printf("输入两个大数:\n");

gets_s(s1);

gets_s(s2);

int n = -300;

n = s1_compare_s2(s1, s2);

if (n > 0)

{

printf("s1大于s2\n");

}

else if(n < 0 && n!=-300 && n!=-2)

{

printf("s1小于s2\n");

}

else if(n==0)

{

printf("s1=s2\n");

}

else

{

printf("有误!\n");

}

system("pause");

system("cls");

goto lebel;

return 0;

}

//用字符串形式比较两个超大数(兼容整数和小数)的大小

//s1>s2返回1 s1<s2返回-1 s1=s2返回0

int s1_compare_s2(char *s1, char *s2)

{

if (s1 == NULL || s2 == NULL)return -2;

//首先获取s1和s2的长度

unsigned int s1len = strlen(s1), s2len = strlen(s2);

//s1和s2对齐后的长度相等

unsigned int len = 0;

//统计小数点的个数

unsigned int num = 0;

//s1 和 s2 的小数标记 是小数赋值1 否则0

int sign1 = 0, sign2 = 0;

//小数点位置索引

unsigned int index1 = 0, index2 = 0;

//非法字符退出

for (int i = 0; i < s1len; i )

{

if (*(s1 i) == '.')

{

num ;

sign1 = 1;

index1 = i;

}

if ((!isdigit(*(s1 i)) && *(s1 i) != '.') || num>1)return -2;

}

//重置num值

num = 0;

//非法字符退出

for (int i = 0; i < s2len; i )

{

if (*(s2 i) == '.')

{

num ;

sign2 = 1;

index2 = i;

}

if ((!isdigit(*(s2 i)) && *(s2 i) != '.') || num>1)return -2;

}

//------------------------------

int len1=0;//s1整数部分长度

//计算len1的长度

if (sign1 == 0)

{

len1 = s1len;//是整数

}

else if (sign1 == 1)

{

len1 = index1; //是小数

}

int len2= 0;//s2整数部分长度

//计算len2的长度

if (sign2 == 0)

{

len2 = s2len;//是整数

}

else if (sign2 == 1)

{

len2 = index2; //是小数

}

//计算对齐总长度len

len = (len1 > len2 ? len1 : len2) ( (s1len - len1) > (s2len - len2) ? (s1len - len1) : (s2len - len2) );

//动态分配内存 存放对齐后的s1 和s2

char *ps1 = (char *)malloc(sizeof(char)*len);

char *ps2 = (char *)malloc(sizeof(char)*len);

//初始化指针所指的内存区域

memset(ps1, '0', len);

memset(ps2, '0', len);

//s1和s2复制到内存指针中

for (int i = 0; i < s1len; i )

{

//遇到小数点 把其替换成'0' 反正不影响判断结果

//这个特殊'0'的位置索引前面已经被标记过了

if (*(s1 i) == '.')

{

*(ps1 i) = '0';

}

else

{

*(ps1 i) = *(s1 i);

}

}

for (int i = 0; i < s2len; i )

{

//遇到小数点 把其替换成'0' 反正不影响判断结果

//这个特殊'0'的位置索引前面已经被标记过了

if (*(s2 i) == '.')

{

*(ps2 i) = '0';

}

else

{

*(ps2 i) = *(s2 i);

}

}

//向右平移对齐 平移单位n

int n = 0;

n = abs(len1 - len2);

char *ps1_1 = ps1 n;

char *ps2_1 = ps2 n;

if (len1 > len2)

{

//s2整体右移动n位 源ps2 目标ps2_1

memmove(ps2_1, ps2,s2len);

//腾出位置用'0'填充

for (int i = 0; i < n; i )

{

*(ps2 i) = '0';

}

}

else if (len1 < len2)

{

//s1整体右移动n位 源ps1 目标ps1_1

memmove(ps1_1, ps1, s1len);

//腾出位置用'0'填充

for (int i = 0; i < n; i )

{

*(ps1 i) = '0';

}

}

//----------测试---------部分--------------------

printf("s1:\n");

//开始比较从低索引开始

for (int i = 0; i < len; i )

{

//测试输出结果

printf("%c", *(ps1 i));

}

printf("\n");

printf("s2:\n");

for (int i = 0; i < len; i )

{

printf("%c", *(ps2 i));

}

printf("\n");

system("pause");

//-----------------------------------------------

//开始比较从低索引开始

for (int i = 0; i < len; i )

{

if (*(ps1 i) > *(ps2 i))return 1;//s1大于s2返回1

if (*(ps1 i) < *(ps2 i))return -1;//s1小于s2返回-1

}

free(ps1);

free(ps2);

return 0;

}

栏目热文

鲁滨逊漂流记手抄报 六年级 简单 简笔画(鲁滨逊漂流记简易手抄报图片)

鲁滨逊漂流记手抄报 六年级 简单 简笔画(鲁滨逊漂流记简易手抄报图片)

部编版小学语文六年级下册第二单元是名著导读单元,主题是“走进外国文学名著”。主要由三篇课文组成:《鲁滨逊漂流记》《骑鹅旅...

2022-12-17 17:58:54查看全文 >>

吕瑞兰直播事故(兰酱吕瑞兰直播事故)

吕瑞兰直播事故(兰酱吕瑞兰直播事故)

哈喽大家好,这里是蜻蜓队长Zwj。说起咱们Dota圈内的美女主播大家肯定会想到素有“大大大”之称的美女Lilith吧?当...

2022-12-14 15:17:53查看全文 >>

新郑机场t2航站楼登机口分布图(新郑机场t2登机口地图)

新郑机场t2航站楼登机口分布图(新郑机场t2登机口地图)

5月5日,有市民向大象新闻记者反映,询问从郑州向新郑机场接人都需要出示哪些证明?是否需要提供相关离郑手续?记者随即进行了...

2022-12-07 21:41:29查看全文 >>

萨克斯曲深情的吻简谱(深情的吻萨克斯独奏谱)

萨克斯曲深情的吻简谱(深情的吻萨克斯独奏谱)

亲亲心房的壁炉火焰兴起严冬的冰雪飞扬盛夏冲浪的激情亲亲幽夜的暗幕闪耀明星星月夜的甜柔击溃仗势凌人的孤寂亲亲默契的呼吸心相...

2022-12-21 19:16:33查看全文 >>

备孕前吃叶酸易怀男孩(备孕前吃叶酸怀孕几率大吗)

备孕前吃叶酸易怀男孩(备孕前吃叶酸怀孕几率大吗)

我是87年兔子,是大龄女青年了,老公比我大几岁,大家都知道现在生活在城市里压力很大,没有稳定的收入根本不敢生孩子,自己都...

2023-01-23 09:40:16查看全文 >>

奔驰二手车e300报价及图片大全(奔驰e300 2016款二手车)

奔驰二手车e300报价及图片大全(奔驰e300 2016款二手车)

大奔这个称号虽然已经不像十几年前含金量那么高,但依旧可以算小康的标准。能称得上“大奔”,首先得够大,尺寸大了自然气场足,...

2022-12-22 21:00:12查看全文 >>

强极性化合物(常见化合物极性表)

强极性化合物(常见化合物极性表)

三聚氰胺(melamine)学名三氨三嗪,别名密胺、氰尿酰胺、三聚酰胺。作为一种重要的化工原料,主要用于生产塑料、胶水和...

2022-12-19 08:45:45查看全文 >>

原矿绿松石108佛珠图片及价格(绿松佛珠图片大全)

原矿绿松石108佛珠图片及价格(绿松佛珠图片大全)

绿松石108串珠项链是比较常见的配饰,一般根据个人的体型来选择相应的尺寸,女士来说佩戴6mm的较多,而男士一般为8mm左...

2022-12-16 15:30:55查看全文 >>

小米手机如何与电脑(小米手机如何与电脑连接传输照片)

小米手机如何与电脑(小米手机如何与电脑连接传输照片)

说到MIUI11最有惊喜的功能,那一定包括小米互传,它带来了高速便捷的互传体验,除了日常文件传输外,桌面的安装包也可以直...

2023-10-13 14:25:16查看全文 >>

文档排行