【9110】高精度减法
来源:互联网 发布:java多次继承例子 编辑:程序博客网 时间:2024/06/05 20:34
Time Limit: 1 second
Memory Limit: 2 MB
问题描述输入两个正整数x和y,输出第一个数减第二个数的差。
Input
输入只有两行,第一行一个整数x,第二行一个整数y。其中0<=x<=10^160,0<=y<=10^160
Output
输出有1行,为两个数的差。
Sample Input
222222222233333333333333333333222222222222222222222222222222
Sample Output
11111111111111111111(换行)
【题解】
将x和y都逆序存进去。用一个c数组直接等于两个数相减。for (1 -> 较长的长度) c[i] = a[i]-b[i];
然后for (1 ->较长的长度)
if (c[i] <0) c[i] +=10;
c[i+1]--;
然后去除多余的0;
【代码】
#include <cstdio>#include <iostream>#include <string>using namespace std;string s1,s2,s3;int l1,l2,l3,a[200],b[200],c[200];void input_data() //要判断一下 s1和s2的大小{ cin >> s1; cin >> s2; l1 = s1.size(); l2 = s2.size(); bool bo = false; if (l1 < l2) bo = true; if (l1 == l2) //如果长度相等 再比较第一个不同的数字 然后判断是否要调换顺序 即确定s1-s2,然后再输出一个负号 for (int i = 0;i <= l1-1;i++) if (s1[i] == s2[i]) continue; else if (s1[i] < s2[i]) bo = true; else break; if (bo) { printf("-"); s3 = s1;s1 = s2;s2 = s3; l1 = s1.size(); l2 = s2.size(); } for (int i = 1;i <= 199;i++) c[i] = 0,a[i] = 0,b[i] = 0; for (int i = 1;i <= l1;i++) //把a,b数组表示出来 (逆序) a[i] = s1[l1-i] - '0'; for (int i = 1;i <= l2;i++) b[i] = s2[l2-i] - '0';}void get_ans(){ for (int i = 1;i <= l1;i++) //等于两个数相减 c[i] = a[i] - b[i]; for (int i = 1;i <= l1;i++) if (c[i] < 0) c[i] += 10,c[i+1]--; while (c[l1] == 0 && l1 > 1) l1--;}void output_ans(){ for (int i = l1;i >=1;i--) printf("%d",c[i]);}int main(){ input_data(); get_ans(); output_ans(); return 0;}
0 0
- 【9110】高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 运行Android studio报错com.google.android.gms:play-services-appindexing:8.1.0
- 如何动态删除题型
- UIScrollView文档翻译
- Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条
- 阻塞和非阻塞
- 【9110】高精度减法
- Linux 安装 Oracle 11g——静默安装 GRID
- hadoop WordCount源码
- Block实现iOS回调
- 浏览器 HTTP 协议缓存机制详解
- UITableView文档翻译
- labview 串口通信开发基础详解
- Androud 通过代码添加margin属性
- fgetpos