高位数求最大公约数 注意到a%b后就在int范围内了 故先取% 在余数相乘过程中可能会越界用long long转换

对大数运算时要考虑每次加乘运算后是否越界

#include <iostream>
#include<cstring>
using namespace std;
const int N=1000010;
char a[N];//用字符储存
int gbc(int a,int b){
    return b?gbc(b,a%b):a;
}
int main() {
    scanf("%s",a);
    int b;
    scanf("%d",&b);
    int r=0;
    for(int i=0;a[i]!='\0';i++){//字符串以'\0'结尾
        int j=a[i]-'0';//字符转为数
        r=((long long)r*10+j)%b;//r*10可能越界   取模的递推公式
		//取模的分解 先对内分别取模再对整体取模
    }
    printf("%d",gbc(b,r));
    return 0;
    }