高精度除法与求余c++版(除数与被除数100000位):
代码如下:
//高精度除法与求余
#include
#include
#include
using namespace std;
const int M=1e5+5;
char s[M],result[M];
int main()
{
long long mod,divis;
int n,i,k,flag,len;
while(cin>>s>>n) //输入被除数s以及除数n
{
len=strlen(s);
divis=flag=0;
for(i=k=0; i
{
divis=divis*10+s[i]-'0';
if(divis>=n&&!flag) //利用除法性质,当divs大于除数n时,开始进行整除
{
result[k++]=divis/n+'0';
divis=divis%n; //除法性质,余数*10加下一位的数字便是新的被除数
flag=1;
}
else if(flag)
{
result[k++]=divis/n+'0';
divis=divis%n;
}
}
if(!k) result[k++]='0';
result[k]='\0';
cout<
mod=0;
for(i=0; i
{
mod=mod*10+s[i]-'0';
mod=mod%n; //利用除法性质,其实质是每次都是一个最多比n多一位的mod对n进行求余
}
cout<
}
return 0;
}
#include
#include
#include
#include
using namespace std;
#define DIGIT4
#define DEPTH10000
#define MAX 30000
typedef int bignum_t[MAX+1];
int read(bignum_t a,istream& is=cin){
char buf[MAX*DIGIT+1],ch;
int i,j;
memset((void*)a,0,sizeof(bignum_t));
if (!(is>>buf))return 0;
for (a[0]=strlen(buf),i=a[0]/2-1;i>=0;i--)
ch=buf[i],buf[i]=buf[a[0]-1-i],buf[a[0]-1-i]=ch;
for (a[0]=(a[0]+DIGIT-1)/DIGIT,j=strlen(buf);j
for (i=1;i<=a[0];i++)
for (a[i]=0,j=0;j
a[i]=a[i]*10+buf[i*DIGIT-1-j]-'0';
for (;!a[a[0]]&&a[0]>1;a[0]--);
return 1;
}
void write(const bignum_t a,ostream& os=cout){
int i,j;
for (os<