折腾一个星期,终于把计算器完成了,实现加减乘除,精确度能达到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;//保存小数位中较多的位数

 


基于Wince的计算器程序_十进制