CCF NOI1139 高精度减法
来源:互联网 发布:树莓派读取温湿度数据 编辑:程序博客网 时间:2024/06/05 16:57
问题链接:CCF NOI1139 高精度减法。
时间限制: 1000 ms 空间限制: 262144 KB
题目描述
给两个正整数a和b,计算它们的差。题目保证a>=b
输入
两行每行一个数,分别表示a和b(位数达10000位)。
输出
输出它们的差。样例输入
2
1
样例输出
1
数据范围限制
位数达10000位
提示
问题分析
这是一个减法计算问题,但是位数多,可能达到10000位,超出了所有整数类型能够表示的范围。
大数计算一种是构建一个大数类进行计算,另外一种是直接计算。
人们使用阿拉伯数字,据说是印度人发明的。需要注意的一点是,阿拉伯数字的高位在左边,阅读上是从左到右,而计算上人们则是从低位算起。
大数可以放在数组中,为了计算上的方便,应该把低位放在下标小的地方,高位放在下标大的地方。
读入的数可以放在字符数组或字符串变量中,高位在左低位在右。
减法计算需要考虑借位问题,相减后位数可能减少。
因为a>=b,所以不用考虑相减后的符号问题。
程序采用直接模拟计算。
要点详解
- 使用宏定义可以使得代码可阅读性增强。
- 加法计算需要考虑进位,实际上每一位的加法是三个数相加。
参考链接:(略)。
100分通过的C语言程序:
#include <stdio.h>#include <string.h>#define BASE 10#define N 10000char a[N+1], b[N+1];char ans[N+1];int main(void){ int anslen, carry, len, i, j; scanf("%s", a); scanf("%s", b); memset(ans, 0, sizeof(ans)); anslen = len = strlen(a); for(i=len-1, j=0; i>=0; i--) ans[j++] = a[i] - '0'; len = strlen(b); if(len > anslen) anslen = len; carry = 0; for(i=len-1, j=0; i>=0; i--,j++) { ans[j] -= b[i] - '0' + carry; if(ans[j] < 0) { carry = 1; ans[j] += BASE; } else carry = 0; } while(carry > 0) { ans[j] -= carry; if(ans[j] < 0) { carry = 1; ans[j] += BASE; } else carry = 0; j++; } if(ans[anslen - 1] == 0) anslen--; for(i=anslen-1; i>=0; i--) printf("%d", ans[i]); printf("\n"); return 0;}
0 0
- CCF NOI1139 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 求高精度幂
- 基于proteus的51单片机仿真实例三十七、C语言的函数参数传递
- 源码解析-集合-HashMap
- POJ 2253 Frogger
- 多播地址和端口会冲突吗?
- CCF NOI1139 高精度减法
- 基于proteus的51单片机仿真实例三十八、C语言的函数调用
- 基于proteus的51单片机仿真实例三十九、C语言的文件调用
- 【Angular2】@angular/cli默认端口号配置
- 基于proteus的51单片机仿真实例四十、C语言的文件调用
- ESP32 系列博客
- 分享糖果
- java 中逻辑运算符&与&&,|与||
- actor platform 服务器的搭建