项目开发记录1 — 长整数处理
1、程序结构设计
2、主要函数功能实现
(1)除法
算法实现
核心逻辑:从高位依次除以除数,分别存储结果与余数,余数乘10进位与下一位相加,再循环执行上述操作
下图给出了一个长整数除以int整形数据的简单示例
核心代码(仅给出计算第一个数据进行除法运算示例的部分代码)
1 2 3 4 5 6 7 8 9 10 11
| numa[0] = strlen(s1);//储存余数使用 for (i = strlen(s1) - 1; i >= 0; i--) numa[i + 1] = s1[strlen(s1) - 1 - i] - '0';
for (i = strlen(s1); i >= 1; i--) { numa[0] = numa[i] numa[i] = numa[i] / num;//存储结果 if (i != 1) { numa[i - 1] = 10 * numa[0] + numa[i - 1]; } }
|
(2)进制转换
算法实现
核心逻辑:除2/8/16取余,倒序输出(转16进制时需要对10 - 15转换成对应大写字母输出%c字符型)
下图给出了将一个十进制数据转换为八进制的简单示例
核心代码(仅给出计算第一个数据进制转换示例的部分代码)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| void TNS(char s1[], char s2[], int target) { while (1) {
Divide(s01, s02, target); result_1[m] = numa[0]; m++; i = strlen(s01); while (numa[i] == 0) { if (i == 1) { break; } i--; }
j = 0; for (; i >= 1; i--) { s01[j] = numa[i] + '0'; if (i != 1) { j++; } }
s01[j + 1] = '\0';
if (j == 0 && s01[0] == '0') { break; } } }
|
16进制字母替换代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| for (i = 0; i < m; i++) { if (result_1[i] > 9) { res_ch1[i] = result_1[i] } else { res_ch1[i] = result_1[i] + '0'; } } for (i = 0; i < n; i++) { if (result_2[i] > 9) { res_ch2[i] = result_2[i] } else { res_ch2[i] = result_2[i] + '0'; } }
|
3、项目打包/发行为exe/安装包
会另行在其他文章详细记录。