1308:【例1.5】高精除

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 9100     通过数: 4302

【题目描述】

高精除以高精,求它们的商和余数。

【输入】

输入两个低于300位的正整数。

【输出】

输出商和余数。

【输入样例】

1231312318457577687897987642324567864324567876543245671425346756786867867867
1231312318767141738178325678412414124141425346756786867867867

【输出样例】

999999999748590
179780909068307566598992807564736854549985603543237528310337

【分析】

在读小学时,我们做除法都采用竖式方法计算。被除数从高位开始,和除数对齐,逐位“试商”,“试商”后除数减去“试商”的数的乘积,如下图所示。

采用计算机做高精度除法时,计算机不可能做“试商”,这时,我们可以采用减法来模拟。

试商过程:

1)将除数移动和被除数对齐,位数不够时,补 0。

2)利用被除数减去除数,一直减到被除数小于除数,减的次数,就是“试商”的结果。

3)重复上述步骤,一直到被除数和除数的位数相等为止。

【参考代码】

C代码:

#include <stdio.h>
#include <string.h>
#define MAXN 310char s1[MAXN],s2[MAXN];
int tmp[MAXN],a[MAXN],b[MAXN],c[MAXN];int compare(int a[], int b[])
{int i;if(a[0]>b[0])return 1;else if(a[0]<b[0])return -1;//逐位比较for(i=a[0];i>0;i--){if (a[i]>b[i])return 1;else if(a[i]<b[i])return -1;}return 0;
}void numcpy(int a[],int b[],int dest)
{int i;for(i=1;i<=a[0];i++)b[i+dest-1]=a[i];b[0]=a[0]+dest-1;
}int main()
{int i,j,k,flaga=0,flagb=0;int len;scanf("%s %s", s1, s2);//读入字符串//处理负数if(s1[0]=='-'){flaga=1;strcpy(s1,&s1[1]); //删除负号}if(s2[0]=='-'){flagb=1;strcpy(s2,&s2[1]);//删除负号}//处理输出的负号if(flaga==1 && flagb==0){//商为负数printf("-");}//处理乘数1len=strlen(s1);a[0]=len;for(i=0;i<len;i++)a[len-i]=s1[i]-'0';//处理乘数2len=strlen(s2);b[0]=len;for(i=0;i<len;i++)b[len-i]=s2[i]-'0';if(compare(a,b)==0){//两数相等printf("1\n0\n");return 0;}else if(compare(a,b)==-1){//被除数小,除数大printf("0\n");//输出除数if(flaga==1)printf("-");printf("%s\n",s1);return 0;}else{c[0]=a[0]-b[0]+1;for(i=c[0];i>0;i--){memset(tmp,0,sizeof(tmp));//高位对齐numcpy(b,tmp,i);while(compare(a,tmp)>=0){c[i]++;//减法for(j=1;j<=a[0];j++){if(a[j]<tmp[j]){a[j+1]--;a[j]+=10;}a[j]-=tmp[j];}k=a[0];while(a[k]==0)k--;a[0]=k;}}//控制最高位的0while (c[0]>0 && c[c[0]]==0) {c[0]--;}}//逆序打印输出商和余数for(i=c[0];i>0;i--)printf("%d", c[i]);printf("\n");if(a[0]==0){printf("0\n");}else{if(flaga==1){printf("-");}for(i=a[0];i>0;i--){printf("%d", a[i]);}printf("\n");}return 0;
}

http://ybt.ssoier.cn:8088/problem_show.php?pid=1308

信息学奥赛一本通(1308:【例1.5】高精除)相关推荐

  1. 信息学奥赛一本通 1308:【例1.5】高精除

    [题目链接] ybt 1308:[例1.5]高精除 [题目考点] 1. 高精度 考察:高精除以高精 高精度计算讲解 [题解代码] 解法1:使用数组与函数 #include<bits/stdc++ ...

  2. 【例1】 0/1背包《信息学奥赛一本通》【解法一】 02

    /* [例1] 0/1背包<信息学奥赛一本通>[解法一] 02 http://ybt.ssoier.cn:8088/problem_show.php?pid=1267 */ #includ ...

  3. 【例8】合唱队形(《信息学奥赛一本通第五版》)

    /* [例8]合唱队形(<信息学奥赛一本通第五版>) http://ybt.ssoier.cn:8088/problem_show.php?pid=1264 [问题描述] N位同学站成一排 ...

  4. 信息学奥赛一本通 2021:【例4.6】最大公约数

    [题目链接] ybt 2021:[例4.6]最大公约数 [题目考点] 1. while循环 2. 求最大公约数 辗转相减法 辗转相除法 [解题思路] 解法1:枚举 取较小数字,从该数字的值开始从大到小 ...

  5. 信息学奥赛一本通(2032:【例4.18】分解质因数)

    2032:[例4.18]分解质因数 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 582     通过数: 376 [题目描述] 把一个合数分解成若干个质因数乘积 ...

  6. 信息学奥赛一本通——2062:【例1.3】电影票

    2062:[例1.3]电影票 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 57341     通过数: 34230 [题目描述] 已知一位小朋友的电影票价是10 ...

  7. 信息学奥赛一本通 1278:【例9.22】复制书稿(book) | 洛谷 P1281 书的复制

    [题目链接] ybt 1278:[例9.22]复制书稿(book) 洛谷 P1281 书的复制 [题目考点] 1. 动态规划:线性动规 [解题思路] 该题可以抽象为:将由m个数字构成的序列分成k个子段 ...

  8. 信息学奥赛一本通1267:【例9.11】01背包问题(二维dp与滚动数组优化)

    [题目描述] 一个旅行者有一个最多能装 MM 公斤的背包,现在有 nn 件物品,它们的重量分别是W1,W2,...,WnW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC1,C2,. ...

  9. 信息学奥赛一本通C++语言-----2036:【例5.3】开关门

    [题目描述] 宾馆里有n(2≤n≤1000)n(2≤n≤1000) 个房间,从1∼n1∼n 编了号.第一个服务员把所有的房间门都打开了,第二个服务员把所有编号是22 的倍数的房间"相反处理& ...

  10. 信息学奥赛一本通——2068:【例2.6】鸡兔同笼

    大家好(๑╹◡╹)ノ" 这里是小蒟蒻 一天没更新了呢! 今天给大家带来<信息学奥赛一本通--2068:[例2.6]鸡兔同笼> 题目: 2068:[例2.6]鸡兔同笼 时间限制: ...

最新文章

  1. 大话中文文本分类之fastText
  2. c#调用excel报错 (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT))问题的解决
  3. 安装Fedora 15后需做的25件事情
  4. linux wc -l 对io,linux设备驱动归纳总结(五):2.操作硬件——IO内存
  5. 如何解决两个相邻的span中间空隙
  6. 快速创建springBoot
  7. hadoop运维必备命令
  8. VC各种情况下的窗口句柄的获取
  9. 汇编语言属于C语言吧,汇编语言和c语言的区别是什么
  10. Linux系统中添加硬盘,并挂载到已有的目录,比如/home/user
  11. scrapy setting配置
  12. rails用generate为两个模型创建has_and_belongs_to_many中间表
  13. FTP、WEB虚拟目录作用
  14. MySQL更新死锁问题
  15. JS代码转换d.ts语法
  16. 一种绘制有向图的方法<TSE93> - 1. 引言
  17. 计算机启动灯1212,惠普笔记本电脑型号F6C27PA#AB2wifi开关一直亮红灯开不起怎么办?...
  18. 2022爱分析・消费品零售数字化厂商全景报告 | 爱分析报告
  19. IMAX探索VR产业,欲再造电影业传奇!
  20. 能认真做 Android 技术分享的已经不多了

热门文章

  1. 一般软件工程师怎样拥有更多的资产
  2. 数学不好,能学好机器学习吗?
  3. DeepNude已迅速下线,来看看它涉及的图像修复技术
  4. 重磅!阿里宣布成立芯片公司,“平头哥”能解决中国的“无芯之痛”吗?
  5. “因为你不懂技术…” 警察:???
  6. 从17 个方面对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 等分布式消息队列
  7. 如何看待李开复演讲称早期帮旷视拿了蚂蚁金服大量人脸数据,以及李开复、蚂蚁和旷视的澄清?该如何保护隐私?...
  8. java+nginx+tomcat+memcache
  9. JavaEE基础(01):Servlet实现方式,生命周期执行过程
  10. Windows 10系统下 MySql 5.7 my.ini 位置