谁能跟我讲讲这道C++程序题的思路!!!急啊!!! 20
两个任意长度的正数相减,这两个正数可以带小数点,也可以是整数,请输出结果。 输入的字符串中,不会出现除了数字与小数点以外的其它字符,不会出现多个小数点以及小数点在第一个字符的位置等非法情况,所以考生的程序中无须考虑输入的数值字符串非法的情况。
详细要求以及约束:
1.输入均为正数,但输出可能为负数;
2.输入输出均为字符串形式;
3.如果输出是正数则不需要带符号,如果为负数,则输出的结果字符串需要带负号
例如:2.2-1.1 直接输出为“1.1”,1.1-2.2 则需要输出为“-1.1”
4.输出的结果字符串需要过滤掉整数位前以及小数位后无效的0,小数位为全0的,直接输出整数位
例如相减结果为11.345,此数值前后均不可以带0,“011.345”或者“0011.34500”等等前后带无效0的均视为错误 输出。例如1.1-1.1结果为0.0,则直接输出0。
要求实现函数:
void Decrease(char *input1, char*input2, char *output)
【输入】 char *iinput1 被减数
char*nput2 减数
【输出】 char *output 减法结果
【返回】 无 展开
既然是任意位置的,则打消掉直接用浮点型求出结果
两个数中小数位多的进行记录(比如a中有3位小数,b中又2位小数 ,则记录decNumber= 3)
两个书中整数位多的进行记录(比如a中又4为b中有5位吗,则记录 intNumber= 5)
具体的例子比如 a = 10.0004 b = 532.03
则decNumber =4 ; intNumber = 3 ;
根据小数位和整数位利用0都填充到最大为数
则 a = 010.0004 b = 532.0300
这时候可以忽略小数点,待全部减完之后除10^4(因为小数有4位所以除10000)
按楼主要求,我只给你说思路,代码不提供,这样才能锻炼楼主能力。
void Decrease(char *input1, char*input2, char *output) 给出了这个函数的接口,分别指定了输入输出,而且都是字符串。
做这个计算,先要实现从两个输入字数串中提取出数字,怎么提取?用比如input1[0] - '0' 就可以把各个位的值取出来哟。但取之前,最好是先找一下有没有小数点哟。
如果有小数点,请把两个数都弄成浮点类型,再计算,如果都没小数点,就弄成整型再计算。
计算完后,把计算结果再转成字符串,存到output上。记住,在里面用个static的字符数组缓存结果,最后把output指向这个数组就可以了。转的时候记得区分小数点、个位、十位等哟。
return;完成。
当然,楼主也可以调用一些字符串处理函数来更方便地完成以上所提到的一些字符串转化操作哟。
两个正数-->a,b>0;
输入的字符串中,不会出现除了数字与小数点以外的其它字符--->输入字符 0~9和“.”共10个;
字符类型做算术运算需要强制转换其类型可以改变输出结果为double或者float;
检测字符串第一个字符,取出来检测是否是“.”;
建议出现第一个正数比第二个小,先计算出值再去添加符号;
ps:出这道题的人感觉是不是傻?什么东西都混在一起,顺便说下我去年买个表
首先考虑位数对其,也就是小数点前后数字个数一样:
例如 23.12 - 2.1 对其成:23.12-02.10
例如 23.12 - 2 对其成:23.12-02.00
至于怎么对其,自己想,不难
然后遍历字符串,每一位相减(有小数点的就不要减,保留)
结果处理,去掉前后无效的0