- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
高精度计算c
竞赛辅导3
在利用计算机进行数值计算时,如果对数值的要求在允许范围内,可以利用数值型数据进行存储,数值范围较大,计算精度要求较高,就需要采用软件的方法来处理相应运算,这类算法统一称为高精度计算算法。
在计算机上进行高精度计算,首先要处理好以下几个基本问题:1)数据的接收与存储;2)计算结果位数的确定; 3进位处理和借位处理; 4商和余数的求法;
数据的接收与存储①、当输入的数值在计算机允许的范围内时,可以用数值型变量来接收数据。 ②、当输入的数据超过计算机允许显示的精度范围时,采用字符来接收数据。 ③、分离各位数字。计算结果位数的确定位数①、两数之和的位数最大为较大的数的位数加1。 ②、乘积的位数最大为两个因子的位数之和。 ③、阶乘与乘方的位数可以采用对数运算来确定计算结果的位数。进位处理和借位处理I]
规则:
商和余数的求法设A,B分别为不大于9位的整数,则 Program gjd-jiafa.cpp;
#include
#include
#include
main char str1[30],str2[30]; int a[30],b[30]; scanf %s%s,str1,str2 ; // puts str1 ; // puts str2 ; int len1,len2; len1 strlen str1 ; len2 strlen str2 ; //printf %d %d\n,len1,len2 ; int i,k; // for i 0;i len1;i++ printf %c,str1[i] ; // printf end\n ; k 0; for i len1;i 0;i-- a[k] str1[i-1]-48; k k+1; k 0; for i len2;i 0;i-- b[k] str2[i-1]-48; k k+1; if len1 len2 for i len1;i len2;i++ a[i] 0; else for i len2;i len1;i++ b[i] 0; ; if len1 len2 k len1;else k len2; int f 0; for i 0;i k;i++ a[i] a[i] + b[i] + f; if a[i] 10 f a[i] / 10;else f 0; a[i] a[i] % 10; // printf %d ,a[i] ; //printf over\n ; if f! 0 a[k] f; if f! 0 printf %d,a[k] ; for i k-1;i 0 ;i-- printf %d,a[i] ; printf %d\n,a[0] ; getch ; .
练习:设计高精度减法程序
高精度乘法运算
Program gjd-chengfa.cpp;
#include
#include
#include
main char str1[30],str2[30]; scanf %s%s,str1,str2 ; int len1,len2; len1 strlen str1 ; len2 strlen str2 ; printf %d %d\n,len1,len2 ; int a[30],b[30],c[30]; int i,j,k;k 0; for i len1-1;i 0;i-- a[k] str1[i]-0; k k+1; for i 0;i len1;i++ printf %d ,a[i] ; printf %\n ; k 0; for i len2-1;i 0;i-- b[k] str2[i]-0; k k+1; for i 0;i len2;i++ printf %d,b[i] ; printf %\n ; for i 0;i len1+len2;i++ c[i] 0; int f; for i 0;i len1;i++ f 0; for j 0;j len2;j++ c[i+j] c[i+j]+ a[i]*b[j] % 10; f a[i]*b[j] /10; f c[i+j] / 10+f; c[i+j] c[i+j] %10; c[i+j+1] c[i+j+1]+f; // printf %d %d %d\n,i+j,c[i+j],c[i+j+1] ; k len1+len2-1; while c[k] 0 k k-1; for i k;i 0;i-- printf %d,c[i] ; printf %\n ; getch ; 例3、求n!的精确值,每个单元存放四位数。(用高精度算法求出
文档评论(0)