网站系统介绍,网易云课堂的网站建设特点,it培训学校哪家好,网页网站关系数组
数组是最简单的数据结构#xff0c;虽然数组简单#xff0c;但是在算法竞赛中至关重要#xff0c;因为其他数据结构都可以用数组来模拟#xff0c;即“物理存储上是数组#xff0c;逻辑上是其他数据结构”。用数组模拟其他数据结构#xff0c;虽然不是工程项目中的…数组
数组是最简单的数据结构虽然数组简单但是在算法竞赛中至关重要因为其他数据结构都可以用数组来模拟即“物理存储上是数组逻辑上是其他数据结构”。用数组模拟其他数据结构虽然不是工程项目中的正规做法但是非常适合算法竞赛因为这样编写代码快、不易出错。 例题.高精度加法
【题目描述】输入两个整数a和b输出这两个整数的和。a和b都不超过100位。
C的数据类型中最大的long long类型可以声明64位的二进制数变量。此题的关键是处理大数的输入因为整数a和b太大无法将其直接赋值给C的变量所以不能按数字读入只能按字符读入。
代码
#includeiostream
#includestring
using namespace std;
int a[1010],b[1010],c[1010]; //两个加数及和
int lena,lenb,lenc,i;
void sumn(int a[],int b[]){lenclena;if(lenalenb) lenclenb; //以较长数据为基准for( i0; ilenc; i){c[i]a[i]b[i]c[i]; //考虑进位if(c[i]10){c[i1]1; //需进位 c[i]c[i]-10; } }if(c[lenc]0) lenc; //处理最高位的进位
}int main(){string s1,s2; //两个加数 cins1s2;lenas1.size(); lenbs2.size();for( i0; ilena; i){ //字符倒序存入数组中 a[lena-i-1]s1[i]-0;}for( i0; ilenb; i){b[lenb-i-1]s2[i]-0;}//求和 sumn(a,b);for( ilenc-1; i0; i--){coutc[i];}return 0;
} 例题.阶乘计算
【题目描述】输入一个正整数n输出n!的值n≤1000。
这是一道高精度算法题目高精度算法可用数组实现。
数组a[]需要定义成多大也就是说1000!有多少位可以用Windows自带的计算器直接算出来1000! ≈4e2567。代码中简单地定义成一个更大的数组a[10000]。
代码
#includeiostreamusing namespace std;int main()
{int n;cinn;int a[10000]{1};int length1;for(int i1;in;i){int p0;int carry0; //进位标志while(1){int producta[p]*icarry; //从低位到高位模拟乘法的过程a[p]product%10;carryproduct/10;p;if(a[p]0carry0plength) break; //多余0元素的排除——提前终止乘法运算}lengthp; //length变量获取当前数值的长度}for(int ilength-1;i0;i--) couta[i];coutendl;return 0;
}