科大ACM题库汇编:C++与C编程解题技巧
5星 · 超过95%的资源 需积分: 50 96 浏览量
更新于2024-07-25
收藏 600KB PDF 举报
"acm题库C++与C"
在ACM(国际大学生程序设计竞赛)中,编程语言C++和C常被用来解决各种算法问题。这个资源包含了2010年科大ACM题库的部分汇编题目,旨在帮助参赛者通过练习提升算法能力和编程技巧。下面将对涉及的三个C++程序进行详细解析:
1. 大数除2:
此程序实现了将一个大整数除以2的操作。主要通过遍历字符串形式的大数,逐位进行除法运算。`div2`函数接收一个字符数组`a`作为输入,表示大整数,然后计算每个位上的结果,存储到数组`b`中。最后输出`b`即可得到结果。注意处理进位`d`,以及在结果前可能存在的零。
```cpp
void div2(char a[]) {
// ...
for (i = 0; i < alen; i++) {
b[i] = (((a[i] - '0') + d * 10) / 2) + '0'; // 计算当前位的商
d = ((a[i] - '0') + d * 10) % 2; // 计算当前位的余数
}
// ...
}
```
2. 大数相加:
这个程序实现两个大整数的相加。`add`函数接收两个字符串形式的大整数`a`和`b`,并返回它们的和。首先确定结果的长度,然后进行逐位相加,处理进位`up`。如果某位的和大于9,则需要进位,并更新该位的值。最后将结果逆序存入`A`中。
```cpp
void add(char a[], char b[]) {
// ...
while (i >= 0 || j >= 0) {
if (i < 0) x = '0';
else x = a[i];
if (j < 0) y = '0';
else y = b[j];
z = x - '0' + y - '0';
if (up) z = z + 1;
if (z > 9) {
up = 1;
z = z % 10;
} else up = 0;
c[k++] = z + '0';
i--;
j--;
}
// ...
}
```
3. 大数相减:
这个程序实现了两个大整数的相减。同样,`subtract`函数接收两个字符串形式的大整数`a`和`b`,返回它们的差。这里没有给出完整的代码,但基本思路是先确定结果的长度,然后逐位相减,注意处理借位。如果需要借位,需要更新当前位和上一位的值。
这些题目都是ACM竞赛中常见的基础算法问题,通过练习可以提升处理大整数运算的能力,同时加深对位运算、进位、借位的理解。在实际的ACM训练中,参赛者还会接触到更复杂的算法,如排序、搜索、图论、动态规划等,通过不断挑战和练习,可以提升解决问题的效率和质量。
2018-01-02 上传
2011-04-07 上传
2014-11-05 上传
2013-05-28 上传
2013-12-15 上传
2011-11-11 上传
千寻~
- 粉丝: 1361
- 资源: 17
最新资源
- Oracle10g完全卸载
- C++标准库(难得的PDF版本)
- Java Struts教程.pdf
- 基于分层采样粒子滤波的麦克风阵列说话人跟踪方法.pdf
- 基于迭代中心差分卡尔曼滤波的说话人跟踪方法.pdf
- 工业化硅微机械电容式麦克风的设计与性能计算.pdf
- seo教程(精).pdf
- Delphi7下IntraWeb应用开发详解
- VStation 硬件辅助验证平台在高性能CPU 功能验证中的应用
- 园区网互联与网站建设试题
- 麦肯锡的七步成诗法 - 项目实施方法
- SOA 之实践经验分享
- “园区网互联及网站建设”技能大赛方案
- JDBC与Java数据库编程.pdf
- Premier Press - Focus On Sdl
- C#完全手册,C#的基础教程