ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:19.70KB ,
资源ID:16936639      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16936639.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(高精度运算文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

高精度运算文档格式.docx

1、/函数介绍:在字符数组s中适当位置插入符号(void Insert(char s, int left, int right);判断当前余数是否与前面的某个余数相同,若相同,返回该余数的位置下标int IsCycle(char aMAX, int label);利用字符串实现超长整型,高精度除法阶乘运算void Factorial(char *base, char *result);利用字符串实现超长整型,高精度乘方运算void IntPower(char *base, char *exponential, char *power);利用字符串实现超长浮点型,高精度乘方运算,注意指数为整数voi

2、d FloatPower(char *base, char *exponential, char *power);int main(void) char aMAX = 0; char bMAX = 0; char c3*MAX = 0; char dMAX = 0; puts(请输入第一个数:); gets(a);请输入第二个数: gets(b); IntAddition(a, b, c) ;两者之和:) ; puts(c) ; IntSubtration(a, b, c) ;两者之差: puts(c); IntMultiplication(a, b, c) ;两者之积: IntDivisio

3、n(a, b, c, d);两者之商:余数: puts(d);IntPower(a, b, c);两者之乘方: Factorial(a, c);a的阶乘:system(pausereturn 0;void IntAddition(char *augend, char *addend, char *sum)int cAugMAX = 0;/用来存储被加数的整型数组int cAddMAX = 0;/用来存储加数的整型数组int cSumMAX = 0;/用来存储两数之和的整型数组int lenAug = strlen(augend), lenAdd = strlen(addend);/被加数和加数

4、字符串的长度int lenMin = lenAug lenAdd ? lenAug : lenAdd;/两个加数的长度中的较小值int i;/逆序复制加数和被加数到整型数组(因为加法运算是从低位开始)for (i=0; ilenAug; i+) cAugi = augendlenAug-1-i - 0;lenAdd; cAddi = addendlenAdd-1-i - int carry = 0;/进位int s = 0; /两数之和lenMin; i+)/加法运算过程 s = cAugi + cAddi + carry;/两个加数和进位之和作为当前位的和 cSumi = s % 10;/存

5、储当前位 carry = s / 10;/获取进位/处理加数或被加数超出长度lenMin的部分while (i 0)/处理最后一个进位 cSumi+ = carry;int j;for (j=0; j lenB ? 1 : -1;else return strcmp(a, b);void IntSubtration(char *minuend, char *subtrahend, char *difference)if (strcmp(minuend, subtrahend) = 0)/如果两数相等,返回0 strcpy(difference, return;int cMMAX = 0;/用来

6、存储被减数的整型数组int cSMAX = 0;/用来存储减数的整型数组int cDMAX = 0;/用来存储两数之差的整型数组int lenM = strlen(minuend), lenS = strlen(subtrahend);/被减数和减数字符串的长度int lenMin = lenM 0) flag = 0;/被减数大于减数,结果为正数 for (i=0;lenM; cMi = minuendlenM-1-i - lenS; cSi = subtrahendlenS-1-i - flag = 1;/被减数小于减数,结果为负数,此时要用subtrahend - minuend cSi

7、 = minuendlenM-1-i - cMi = subtrahendlenS-1-i - i+)/减法运算过程 if (cMi = cSi)/被减数大于减数,直接相减 cDi = cMi - cSi; else /否则要向前借位 cDi = cMi + 10 - cSi; -cMi+1; /处理减数或被减数超出长度lenMin的部分int len = lenM len)= 0) cDi = cMi; else cDi = cMi + 10;while (cDi-1 = 0) i-;int j = 0;if (flag = 1)/如果被减数小于减数,返回一个负数 differencej+

8、= -int k;for (k=i-1; k=0; k-,j+)/逆序存储两数之差到字符串sum differencej = cDk + differencej = void IntMultiplication(char *multiplicand, char *multiplier, char *product)/用来存储被乘数的整型数组int cRMAX = 0;/用来存储乘数的整型数组int cPMAX = 0;/用来存储两数之乘积的整型数组char tcPMAX = int lenD = strlen(multiplicand), lenR = strlen(multiplier);/

9、被乘数和乘数字符串的长度int i, j, k;/逆序复制乘数和被乘数到整型数组(因为乘法运算是从低位开始)lenD; cDi = multiplicandlenD-1-i - lenR; cRi = multiplierlenR-1-i - int carry;int mul = 0; /两数之乘积strcpy(product, /先使product的值为0 i+)/乘法运算过程 carry = 0; for (j=0; j+)/乘数的每一位都和被乘数进行乘法运算 mul = cDj * cRi + carry;/两个乘数之积与进位相加作为当前位乘积 cPj = mul % 10; carr

10、y = mul / 10; if (carry 0)/获取最后一个进位 cPj+ = carry; while (cPj-1 = 0)/去掉多余的0 -j; /逆序复制当前位的乘积tP到字符串tcP for (k=0; kj; k+) tcPk = cPj-1-k + j+)/注意各位数得到的结果应相应左移 tcPk+ = tcPk = IntAddition(product, tcP, product);/对字符串进行加法运算void IntDivision(char *dividend, char *divisor, char *quotient, char *remainder)if (

11、Compare(dividend, divisor) = 0)/被除数等于除数 strcpy(quotient, 1 strcpy(remainder, return ;if (strcmp(divisor, ) = 0 | Compare(dividend, divisor) = 0)/连减试商 s+; IntSubtration(remainder, divisor, remainder); quotientk+ = s + /记录每一位得到的商值 if (strcmp(remainder, ) = 0) /使product的值为空,去掉多余的0quotientk = /去掉多余的0 qu

12、otienti= ;for (j=i;=k; j+) quotientj-i = quotientj; Radix(char *toStr, char *fromStr)int i = 0, j = 0;int len;while (fromStri != . & fromStri !) toStrj+ = fromStri+;len = i+;/跳过小数点,并记录该位置return i - len - 1;/记录小数点后的数字个数void FloatAddition(char *augend, char *addend, char *sum)char cAugMAX = 0;/用来存储被加数

13、的字符串char cAddMAX = 0;/用来存储加数的字符串char cSumMAX = 0;/用来存储两数之和的字符串int lenAug, lenAdd, lenSum;/分别存储三个数的小数点后的数字个数int i, topAug, topAdd;/去掉小数点,把浮点数转化成整数后存储到新的字符串lenAug = Radix(cAug, augend);lenAdd = Radix(cAdd, addend);topAug = strlen(cAug);topAdd = strlen(cAdd);/在小数部分较短的字符串后补零,使得两个数的小数部分长度相等if (lenAug len

14、Sum = lenAug; for (i=lenAug-lenAdd; i0; i-) cAddtopAdd+ = lenSum = lenAdd; for (i=lenAdd-lenAug; cAugtopAug+ = cAddtopAdd+ = cAugtopAug+ = /执行整数加法运算IntAddition(cAdd, cAug, cSum);i = strlen(cSum) - 1;while (lenSum 0 & cSumi = )/去掉小数部分多余的零 lenSum-;cSumi+2 = 0)/在适当位置插入. cSumi+1 = cSumi;cSumi+1 = strcpy

15、(sum, cSum);void FloatSubtration(char *minuend, char *subtrahend, char *difference)char cMMAX = 0;/用来存储被减数的字符串char cSMAX = 0;/用来存储减数的字符串char cDMAX = 0;/用来存储两数之差的字符串int lenM, lenS, lenD;int i, topM, topS;lenM = Radix(cM, minuend);lenS = Radix(cS, subtrahend);topM = strlen(cM);topS = strlen(cS);if (le

16、nM lenS) lenD = lenM; for (i=lenM-lenS; cStopS+ = lenD = lenS; for (i=lenS-lenM; cMtopM+ = cMtopM+ = cStopS+ = /执行整数减法运算IntSubtration(cM, cS, cD);i = strlen(cD) - 1;while (lenD cDi = lenD-;cDi+2 = cDi+1 = cDi;cDi+1 = if (i = -1)/结果为0的情况 cD0 = cD1 = cD2 = strcpy(difference, cD);void FloatMultiplicati

17、on(char *multiplicand, char *multiplier, char *product)/用来存储被乘数的字符串char cRMAX = 0;/用来存储乘数的字符串char cP2*MAX = 0;/用来存储两数之乘积的字符串int lenD, lenR, lenP;lenD = Radix(cD, multiplicand);lenR = Radix(cR, multiplier);lenP = lenD + lenR;IntMultiplication(cD, cR, cP);int i = strlen(cP) - 1;while (lenP cPi = lenP-;cPi+2 = i = 0)/在适当位置插入

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1