高位数求最大公约数 注意到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;
}

京公网安备 11010502036488号