数组应用——高精度运算的实验范例
2016-08-14 11:52
190 查看
1.高精度数的表示
用一个数组表示一个高精度数:将数字按十进制位分离,每位十进制数依次存储到一个数组中
int a[100]={0};
int n;
string s;
cin>>s;
n=s.length();
for(i=0;i<n;i++)
a[i]=s[n-i-1]-'0';//数组a从右到左按位存储
2.
(1)高精度数加和减
n1为x的位数,n2为y的位数
for(i=0;i<(n1>n2?n1:n2);i++)
a[i]=a[i]+b[i];
if(a[i]>9)
{
a[i]=a[i]-10;
a[i+1]++;
}n为x的位数。若想x<y,数组a和b互换,相减后的差取负
for(i=0;i<n;i++)
{
if(a[i]>b[i])
a[i]=a[i]-b[i];
else
{
a[i]=a[i]+10-b[i];
a[i+1]--;
}
}
(2)高精度数的乘和除
首先要确定积的位数,设两个高精度正整数a和b,La和Lb为其位数。a和b乘积的位数至少为La+Lb-1,若有进位则位数为La+Lb。及位数上限为La+Lb;
for(i=0;i<La-1;i++)
for(j=0;j<Lb-1;j++)
c[i+j]+=a[i]*b[j];
for(i=0;i<La+Lb;i++)
if(c[i]>=10)
{
c[i+j]+=c[i]/10;
c[i]%=10;
}
用一个数组表示一个高精度数:将数字按十进制位分离,每位十进制数依次存储到一个数组中
int a[100]={0};
int n;
string s;
cin>>s;
n=s.length();
for(i=0;i<n;i++)
a[i]=s[n-i-1]-'0';//数组a从右到左按位存储
2.
(1)高精度数加和减
n1为x的位数,n2为y的位数
for(i=0;i<(n1>n2?n1:n2);i++)
a[i]=a[i]+b[i];
if(a[i]>9)
{
a[i]=a[i]-10;
a[i+1]++;
}n为x的位数。若想x<y,数组a和b互换,相减后的差取负
for(i=0;i<n;i++)
{
if(a[i]>b[i])
a[i]=a[i]-b[i];
else
{
a[i]=a[i]+10-b[i];
a[i+1]--;
}
}
(2)高精度数的乘和除
首先要确定积的位数,设两个高精度正整数a和b,La和Lb为其位数。a和b乘积的位数至少为La+Lb-1,若有进位则位数为La+Lb。及位数上限为La+Lb;
for(i=0;i<La-1;i++)
for(j=0;j<Lb-1;j++)
c[i+j]+=a[i]*b[j];
for(i=0;i<La+Lb;i++)
if(c[i]>=10)
{
c[i+j]+=c[i]/10;
c[i]%=10;
}
相关文章推荐
- (数组的应用二:高精度运算4.2.1)POJ 1504 Adding Reversed Numbers(将一个数取反)
- 4.3/4.4/4.5/4.6 高精度(数组应用的典型范例1)
- (数组应用二:高精度运算4.2.2)UVA 10523 VERY EASY !!! (大数累加)
- C#--第2周实验--任务8--编写一个控制台应用--输入10个数存入数组,求最大值、最小值和平均值
- 4.9 矩阵(数组应用的典型范例3)
- List<Map>类型的JavaScript数组应用范例:资讯列表多样化显示
- 程序设计C 实验五 题目五 一维动态数组的应用(0293)
- (数组应用四:数值矩阵的运算4.4.1)POJ 2260 Error Correction(奇偶均匀特性)
- 【JAVA】17、数组应用范例
- Java作业——权限综合实验 + 数组、字符串高级应用
- 4.7/4.8 多项式的表示与处理(数组应用的典型范例2)
- 实验八:一维数组的应用
- C#--第七周实验--任务4--编写一个控制台应用实验Array ArrayList这两个常用数组类。
- 字符串和多维数组实验【计算单词个数+幻方+凯撒密码应用】
- 实验九:二维数组和字符数组的应用
- 数组的相关运算(sizeof和strlen的灵活应用)
- C - Ultra-QuickSort(7.2.2)(7.2应用排序算法编程的实验范例)
- 范例:继承的应用:数组排序,反转
- List<Map>类型的JavaScript数组应用范例:图片多样化显示
- Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识