博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大数除法
阅读量:5929 次
发布时间:2019-06-19

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

/*   功能Function Description:     大数除法   开发环境Environment:          DEV C++ 4.9.9.1   技术特点Technique:   版本Version:   作者Author:				     可笑痴狂   日期Date:                     20120731   备注Notes:   解题方法:	   基本的思想是反复做减法,看看从被除数里最多能减去多少个除数,商就是多少。一个一个减显然太慢,如何减得更快一些呢?	   以7546 除以23 为例来看一下:开始商为0。先减去23 的100 倍,就是2300,发现够减3 次,余下646。于是商的值就增加300。	   然后用646 减去230,发现够减2 次,余下186,于是商的值增加20。最后用186 减去23,够减8 次,因此最终商就是328。	   所以本题的核心是要写一个大整数的减法函数,然后反复调用该函数进行减法操作。 计算除数的10 倍、100 倍的时候,	   不用做乘法,直接在除数后面补0 即可。*/#include
#include
#define MAX 1000int a1[MAX+10],a2[MAX+10],ans[MAX+10]; //a1被除数,a2除数,ans存放商。逆序存放char s1[MAX+10],s2[MAX+10];//长度为 nLen1 的大整数p1 减去长度为nLen2 的大整数p2//结果放在p1 里,返回值代表结果的长度//如不够减返回-1,正好减完返回 0int Substract(int *p1,int *p2,int len1,int len2){ int i; if(len1
=0;--i) { if(p1[i]
p2[i]) //p1>p2 break; } } for(i=0;i
=len2时,p2[i]=0 { p1[i]-=p2[i]; if(p1[i]<0) { p1[i]+=10; --p1[i+1]; } } for(i=len1-1;i>=0;--i) if(p1[i]) //找到最高位第一个不为0 return i+1; return 0; //全部为0,说明两者相等}int main(){ int n,i,j,len1,len2,temp,nTimes; scanf("%d",&n); while(n--) { scanf("%s%s",s1,s2); memset(a1,0,sizeof(a1)); memset(a2,0,sizeof(a2)); memset(ans,0,sizeof(ans)); len1=strlen(s1); len2=strlen(s2); if(len1
=0;--i) a1[j++]=s1[i]-'0'; for(i=len2-1,j=0;i>=0;--i) a2[j++]=s2[i]-'0'; nTimes=len1-len2; if(nTimes>0) { for(i=len1-1;i>=nTimes;--i) a2[i]=a2[i-nTimes];//朝高位移动 for(;i>=0;--i) a2[i]=0; //低位补零 len2=len1; } for(i=0;i<=nTimes;++i) { //一直减到不够减为止 //先减去若干个 a2×(10 的nTimes次方), //不够减了,再减去若干个 a2×(10 的nTimes-1 次方),...... while((temp=Substract(a1,a2+i,len1,len2-i))>=0) //注意while循环中的括号不能少 { len1=temp; ++ans[nTimes-i];//每成功减一次,则将商的相应位加1 } } for(i=MAX;i>=0&&ans[i]==0;--i);//下面输出结果,先跳过高位0 if(i>=0) for(;i>=0;--i) printf("%d",ans[i]); else printf("0"); printf("\n"); } return 0;}

 

转载地址:http://qdevx.baihongyu.com/

你可能感兴趣的文章
服务器环境之2:ubuntu14.04安装jdk1.7
查看>>
iOS视图生命周期
查看>>
使用Spring MVC统一异常处理实战
查看>>
我的友情链接
查看>>
ojdbc6中的错误信息
查看>>
ActiveGantt(甘特图控件)更新至v3.0.4
查看>>
零基础学 Python 之列表生成式
查看>>
C语言:计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
查看>>
数据在内存中的存储
查看>>
Eclipse SmartHome源码编译过程
查看>>
【安全牛学习】笔记手动漏洞挖掘(三)
查看>>
web安全测试概述
查看>>
图片的各种转换
查看>>
【阿里云网站日志分析实践】通过Log Service日志服务导入MaxCompute分析
查看>>
聊聊HystrixConcurrencyStrategy
查看>>
数据库的基本配置和链接
查看>>
linux学习笔记——认识docker及其操作命令
查看>>
linux学习笔记——源码编译安装Mysql
查看>>
对centos进行一些个性化设置(如alias等)
查看>>
git常见使用命令
查看>>