项目开发记录1 — 长整数处理

项目开发记录1 — 长整数处理

1、程序结构设计

这是第1张图片QwQ

2、主要函数功能实现

(1)除法

算法实现

核心逻辑:从高位依次除以除数,分别存储结果与余数,余数乘10进位与下一位相加,再循环执行上述操作
下图给出了一个长整数除以int整形数据的简单示例
这是第2张图片QwQ

核心代码(仅给出计算第一个数据进行除法运算示例的部分代码)

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] % num;//存储余数
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字符型)
下图给出了将一个十进制数据转换为八进制的简单示例
这是第3张图片QwQ

核心代码(仅给出计算第一个数据进制转换示例的部分代码)

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] % 10 + 65;
}
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] % 10 + 65;
}
else {
res_ch2[i] = result_2[i] + '0';
}
}

3、项目打包/发行为exe/安装包

会另行在其他文章详细记录。


项目开发记录1 — 长整数处理
http://example.com/post/text9-project-1.html
作者
Destiny
发布于
2024年5月6日
更新于
2024年5月24日
许可协议