博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【9111】高精度除法(高精度除高精度)
阅读量:5079 次
发布时间:2019-06-12

本文共 2000 字,大约阅读时间需要 6 分钟。

Time Limit: 1 second

Memory Limit: 2 MB

问题描述输入两个高精度非0整数,输出它们的整数商(不考虑小数部分)。

Input

输入只有两行,第一行一个整数x,第二行一个整数y。其中0<=x<=10^200,0<=y<=10^200

Output

输出有1行,为两个数的整数商。

Sample Input

222222222233333333333333333333222222222222222222222222222222

Sample Output

1(换行)
【题解】
思路是,将除数一开始加上n个0,然后不断地用这个去减被除数。减了几次c[n]就为几。然后n--,即除数再除10,然后再用除数去减被除数。减了几次c[n-1]就为几。
其中涉及到高精度的比较,高精度减法等内容。
【代码】
#include 
#include
#include
#include
using namespace std;int a[400],b[400],c[400];void input_data(int a[]) //用一个输入过程。调用两次 就可以读入两个数字了。{ string s1; cin >> s1; a[0] = s1.size(); for (int i = 1;i <= a[0];i++) //逆序存入a数组 a[0]用来存数字的长度 a[i] = s1[a[0]-i] - '0';}bool can(int a[],int b[]) //判断a是否能被b减。如果能返回true{ if (a[0] > b[0]) return true; if (a[0] < b[0]) return false; //先由长度判断 for (int i = a[0];i >= 1;i--)//再根据具体的每一位来判断. { if (a[i] > b[i]) return true; if (a[i] < b[i]) return false; } return true; }void numcp(int a[],int b[],int w) //把a数组赋值给b数组,其中w表示a数字乘了10^w{ for (int i = 1;i <= a[0];i++) b[w+i-1] = a[i]; b[0] = a[0] + w - 1; }void jianfa(int a[],int b[]) //做高精度减法,用a减去b{ for (int i = 1;i <= a[0];i++) { if (a[i] < b[i]) { a[i+1]--; a[i]+=10; } a[i] = a[i] - b[i]; } while (a[0] > 1 && a[a[0]] == 0) a[0]--; //去掉前导0}void gaojingdu(int a[],int b[],int c[]) //高精度除法主程序{ int temp[200]; int lenc = a[0]-b[0] + 1; //这是获取最多乘10的多少次方 同时也是答案数组的长度 可以手算模拟一下. for (int i = lenc;i >= 1;i--) { memset(temp,0,sizeof(temp)); //temp数组归0 numcp(b,temp,i);//把b*10^i 赋值给temp数组 while (can(a,temp)) //不断地减,然后这个位上的答案递增. { jianfa(a,temp); c[i]++; } } while (lenc > 1 && c[lenc] == 0) //去掉前导0 lenc--; c[0] = lenc; //把答案数字的长度赋值给c[0]}void output_ans(){ for (int i = c[0];i >= 1;i--) //打印答案 printf("%d",c[i]); if (c[0] <= 0) //像是1 / 22222222 这样,lenc = 一个负数。这个时候答案直接输出0就好了。 printf("0");}int main(){ input_data(a); input_data(b); gaojingdu(a,b,c); output_ans(); return 0; }

转载于:https://www.cnblogs.com/AWCXV/p/7632407.html

你可能感兴趣的文章
Linux网络命令
查看>>
API OpenGL输出土元函数及相关子程序
查看>>
关键词提取
查看>>
【摘抄】提升web程序性能-前端
查看>>
scikit-learn的梯度提升算法(Gradient Boosting)使用
查看>>
在aspx程序使用CustomValidator验证
查看>>
OBJECTPROPERTY与sp_rename更改对象名称
查看>>
密码策略设置密码过期天数
查看>>
在SSMS查询分析器中显示行号
查看>>
关于jsp中的Unable to compile class for JSP解决
查看>>
mid
查看>>
转 --- socket模块中的各种方法
查看>>
sql server2008随笔
查看>>
一篇文章搞懂柏林噪声算法,附代码讲解
查看>>
SecureCRT无法连接虚拟机Linux—虚拟网卡(NAT方式)IP(169.254.xx.xx)无效问题
查看>>
防篡改对象
查看>>
HTML5图片上传本地预览
查看>>
xml/dom/sax
查看>>
2186: [Sdoi2008]沙拉公主的困惑 - BZOJ
查看>>
排序算法C语言实现——冒泡、快排、堆排对比
查看>>