基于Wince的计算器程序

      折腾一个星期,终于把计算器完成了,实现加减乘除,精确度能达到20位。

      由于用DUI实现界面布局,因此要达到存储24位整数数值,必须用数组,两者结合,使用TCHAR数组,

      加减乘除算法网上都有,有了算法需要的就是操作逻辑,计算器操作逻辑其实并不简单,这里需要搞清楚

      我的逻辑是这样的,首先你要写入一个数字a,按下运算符号,再写入一个数字b,按下=号,记录之前的符号和当前的符号进行判断,以便于下次计算,当你输入小数的时候,需要将所有的小数都化为整数去计算,网上的算法都是正整数的,所以符号位你需要另外去考虑,这也就意味着负数和减法的冲突,也就是说如果先按下负号,你需要判断现在的情况,是用减法的功能,还是负号的功能。另外小数化为整数,运算得到的结果还需要根据原小数点的位置进行判断,所以要进行小数点的移位。

     你需要的变量就比较多了

        TCHAR num_input_a[1000];//输入第一个数
TCHAR i_input_a[1000];//输入第一个数的整数部分
TCHAR f_input_a[1000];//输入第一个数的小数部分
int index_a;//输入第一个数的索引
int i_index_a;//输入第一个数整数部分的索引
int f_index_a;//输入第一个数小数部分的索引


int temp_a;//保存第一个数的临时索引
int i_temp_a;//保存第一个数整数部分的临时索引
int f_temp_a;//保存第一个数小数部分的临时索引




TCHAR num_input_b[1000];//输入的第二个数
TCHAR i_input_b[1000];//输入第二个数的整数部分
TCHAR f_input_b[1000];//输入第二个数的小数部分
int index_b;//输入第二个数的索引
int i_index_b;//输入第二个数整数部分的索引
int f_index_b;//输入第二个数小数部分的索引


bool m_isFloat;//是否为小数
int  num_point_a;//输入第一个数的小数位数
int  num_point_b;//输入第二个数的小数位数


int m_iNega;//0为正数,1为负数


bool m_continmul;//按下乘除后 是否没有按数字,直接按计算符号


bool m_isFlag;//是否点击了加减乘除


TCHAR num_result[1000];//输出结果
TCHAR i_num_result[1000];//输出整数部分结果
TCHAR f_num_result[1000];//输出小数部分结果


int m_jw;//十进制进位
int m_sign;//判断符号
int m_prvsign;//判断计算时前一个符号
int temp_count;//保存小数位中较多的位数

原文地址:https://www.cnblogs.com/dyllove98/p/3127410.html