7 条题解

  • 1
    @ 2026-2-4 20:44:53

    T2 a+b的题解

    对于初学者,我们可以使用心算

    cout<<a+b<<endl;)。

    而这是利用数组模拟现实中的竖式计算完成的加法。 是的没错就是你小学学的那个 在这篇代码里我使用了voidvoid函数,所以逐个函数进行解析:

    一,void clear(int a[]): 就像它的名字一样, clearclear 函数的作用是清空数组a[i]a[i]

    二,void read(int a[]): charchar 定义一个字符串 ss ,通过字符串类型数值对字符'0'做减法来把读入的字符串转化成数字,存到 a[i]a[i] 数组里去。

    三,void print(int a[]): 相信对C语言以及C与C++相通的部分有所了解的同学们一定对 printf() 这个函数不陌生吧,这里 printprint 就是对答案先加上一个字符 '0' ,再用 putchar() 从标准输出输出一个字符串答案。

    四,add(int a[], int b[], int c[]) 高精度加法的核心,将字符串 aa , bb 通过模拟竖式计算做加法,把答案存在数组 cc 里面。

    
    #include<bits/stdc++.h>
    using namespace std;
    
    
    const int len = 1000004;
    
    int a[len], b[len], c[len];
    
    void clear(int a[]) {
    	for (int i = 0; i < len; ++i) a[i] = 0;
    }
    
    void read(int a[]) {
    	static char s[len + 1];
    	scanf("%s", s);
    
    	clear(a);
    
    	int len = strlen(s);
    	for (int i = 0; i < len; ++i) a[len - i - 1] = s[i] - '0';
    }
    
    void print(int a[]) {
    	int i;
    	for (i = len - 1; i >= 1; --i)
    		if (a[i] != 0) break;
    	for (; i >= 0; --i) putchar(a[i] + '0');
    	putchar('\n');
    }
    
    void add(int a[], int b[], int c[]) {
    	clear(c);
    	for (int i = 0; i < len - 1; ++i) {
    		c[i] += a[i] + b[i];
    		if (c[i] >= 10) {
    			c[i + 1] += 1;
    			c[i] -= 10;
    		}
    	}
    }
    
    int main() {
    	read(a);
    	read(b);
    
    	add(a, b, c);
    	print(c);
    
    
    	return 0;
    }
    //by hina
    //BlueArchive!
    

    高精度好玩捏

    信息

    ID
    2
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    630
    已通过
    278
    上传者