#4338. CSP 2022 高精度题型

CSP 2022 高精度题型

 1   #include <iostream>
 2   #include <cstring>
 3   using namespace std;
 4
 5   struct HugeInt{
 6       int len; 
 7 	 int num[100001]; 
 8   };
 9   HugeInt a, b, w;
10   char c[100001],d[100001];
11   void Scan_HugeInt(){
12        cin>>c; 
13        cin>>d; 
14        a.len=strlen(c);
15        b.len=strlen(d);
16        for(int i=0: i<a.len; i++)
17                 ①; 
18        for(int i=0; i<b.len; i++)
19                 ②;
20    }
21    void Plus(){
22         w.len=max(a.len,b.len);
23         for(int i=1; i<=w.len; i++) ( 
24                  w.num[i] +=③; 
25                  w.num[i+1] +=④; 
26                  w.num[i]%=10; 
27         }
28         if(⑤) 
29                  w.len ++; 
30   }
31
32 int main() {
33    Scan_HugeInt();
34    Plus(); 
35    for(int i=w.len; i>=1; i--) 
36             cout <<w.num[i]; 
37    cout <<endl; 
38    return 0; 
39 }

(高精度计算)由于计算机运算的数据范围表示有一定限制,如整型int表达范围是(-2^31~2^31-1),unsigned long(无符号整数)是(0~2^32-1),都约为几十亿,因此在计算位数超过十几位的数时,不能采用现有类型,只能自己编程计算。 高精度计算通用方法:高精度计算时一般用一个数组存储一个数,数组的一个元素对应于数的一位,将数由低位到高位依次存储在数组下标对应的由低到高的位置上。另外,申请数组大小时,一般考虑了最大的情况,在很多情况下表示有富裕,即高位有很多0,可能造成无效的运算和判断,因此一般利用一个整型数据存储该数的位数。下面的程序是一个高精度整数的加法运算,请补充完整程序。


1、

①处应该填( )

{{ select(1) }}

  • a.num[i]=c[i]-‘0’
  • a.num[a.len-i]=c[i]-‘0’
  • a.num[a.len]=c[i]
  • a.num[i]=c[i]

2、

②处应该填( )

{{ select(2) }}

  • b.num[i]=d[i]
  • b.num[b.len-i]=d[i]
  • b.num[b.len-i]=d[i]-‘0’
  • b.num[i]=d[i]-‘0’

3、

③处应该填( )

{{ select(3) }}

  • (a.num[i]+b.num[i])
  • (a.num[i]+b.num[i])%10
  • (a.num[i]%10+b.num[i]%10)
  • (a.num[i]+b.num[i]-10)

4、

④处应该填( )

{{ select(4) }}

  • w.num[i]/10
  • w.num[i]
  • w.num[i]%10
  • w.num[i]-10

5、

⑤处应该填( )

{{ select(5) }}

  • w.num[w.len+1]>=0
  • w.num[w.len+1]==0
  • w.num[w.len+1]!=0
  • w.num[w.len +1]>1