对接CSP-J/S认证C++算法蓝桥等考导学/二级:高精度运算/之二(9)高精度运算(二)(二级完)


一、观看PPT教程 

01】高精度运算(二)

二、练习题(不清楚回头查看有关PPT)

01】下面是高精度数乘低精度数运算代码,有一行代码有误,请改正:

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

#include<iostream>#include<string>using namespace std;int A[201],b,C[202];string s1;int lena, lenc;int init(int a[], string &s){  cin >> s;  int len = s.length();  for(int i=0; i<len; i++)    {        a[i]=s[len-i-1] - '0';    }    return len;  }void mul(){    for(int i = 0; i < lena; i++)    {      C[i] = A[i] * b;      C[i + 1] = C[i] / 10;      C[i] %= 10;  }  lenc = lena;  while(C[lenc] > 10)    {    C[lenc + 1] = C[lenc] / 10;    C[lenc] %= 10;    lenc++;  }}int main(){    lena = init(A, s1);    cin >> b;    mul();  while(C[lenc] == 0 && lenc >0)      lenc--;  for(int i = lenc; i >= 0; i--)      cout << C[i];  cout << endl;  return 0;}

02】下面是高精度数乘高精度数运算代码,请补全漏写的一行:

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

#include<iostream>#include<string>using namespace std;int A[201],B[101],C[202];string s1, s2;int lenA, lenB, lenC;int init(int a[], string &s){  cin >> s;  int len = s.length();  for(int i=0; i<len; i++)    {        a[i]=s[len-i-1] - '0';    }    return len;  }void mul(){    for(int i = 0; i < lenB; i++)    {      int m = 0;      for(int j = 0; j < lenA; j++)      {        C[i+j] += A[j] * B[i] + m;        m = C[i+j] / 10;        C[i+j] %= 10;    }  }}int main(){    lenA = init(A, s1);    lenB = init(B, s2);    mul();    lenC = lenA + lenB;  while(C[lenC] == 0 && lenC >0)      lenC--;  for(int i = lenC; i >= 0; i--)      cout << C[i];  cout << endl;  return 0;}

03】下面是高精度数除以低精度数运算代码,有一行有误,请改正:

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

#include<iostream>#include<string>using namespace std;int A[201],b,C[202];string s1;int lenA, lenC, x;int init(int a[], string &s){  cin >> s;  int len = s.length();  for(int i=0; i<len; i++)    {        a[i]=s[i] - '0';    }    return len;  }void div(){    for(int i = 0; i < lenA; i++)    {      x += A[i];      C[i] = x / b;      x %= b;  }}int main(){    lenA = init(A, s1);    cin >> b;    div();    lenC = 0;  while(C[lenC] == 0 && lenC < lenA -1)      lenC++;  for(int i = lenC; i < lenA; i++)      cout << C[i];  cout << endl << x << endl;  return 0;}

04】编程题:乘阶之和