66分求助,用10^x-1整除原理再除以一些2和一些5
查看原帖
66分求助,用10^x-1整除原理再除以一些2和一些5
957205
Frommyvalleyuphard楼主2023/9/1 16:55
#include<iostream>
#include<cmath>
using namespace std;
int main(){
	int a,b,d2=0,d=0,m=0,m2=0,b2=0,b3=0,b4=0,r=0,a2,a3;
	cin>>a>>b;
	a2=a,a3=b;
	while(a2!=a3){
		if(a2>a3){
			a2=(a2-1)%a3+1;
		}else{
			a3=(a3-1)%a2+1;
		}
	}
	a/=a2;
	b/=a3;
	cout<<a/b<<'.';
	b4=b;
	while(b%2==0){
		b/=2;
		b2++;
	}
	while(b%5==0){
		b/=5;
		b3++;
	}
	b=b4;
	for(int c=0;c<max(b2,b3);c++){
		cout<<(a*int(pow(10,c+1))/b)%10;
	}
	while(b%2==0){
		b/=2;
	}
	while(b%5==0){
		b/=5;
	}
	if(a%b4==0){
		cout<<0;
	}
	d2=9%b;
	a%=b;
	for(int e=0;e>=0;e++){
		if(d2==0){
			d=e+1;
			break;
		}
		d2=(d2*10+9)%b;
	}
	char c[d],c2[d];
	int c3[d]={},c4[d]={};
	for(int f=0;f<d;f++){
		c[f]=57;
		c2[f]=48;
	}
	for(int g=0;g<d-int(log10(b));g++){
		m=0;
			for(int h=g;h<=(g==d-int(log10(b))-1?g+int(log10(b)):g+int(log10(b))+1);h++){
				m=m*10+c[h]-48;
			}
			m2=m/b;
			m%=b;
			for(int h=g;h<=(g==d-int(log10(b))-1?g+int(log10(b)):g+int(log10(b))+1);h++){
				c[h]=int(m/pow(10,(g==d-int(log10(b))-1?g+int(log10(b)):g+int(log10(b))+1)-h))%10+48;
				c2[h]+=int(m2/pow(10,(g==d-int(log10(b))-1?g+int(log10(b)):g+int(log10(b))+1)-h))%10;
			}
	}
	for(int g=d-1;g>=0;g--){
		c3[g]+=(c2[g]-48)*a;
		if(c3[g]>=10){
			c3[g-1]=(c3[g])/10;
			c3[g]=(c3[g])%10;
		}
	}
	d2=0;
	for(int c=0;c<b2;c++){
	 if(d>1){
		for(int e=0;e<d;e++){
			d2=c3[e]*10+c3[(e+1)%d];
			c4[(e-1+d)%d]+=d2/2/10;
			c4[e]+=d2/2%10;
			c3[e]=0;
			c3[(e+1)%d]=d2%2;
		}
		for(int f=0;f<d;f++){
			c3[f]=c4[f];
			c4[f]=0;
		}
	 }else if(b!=1){
		c3[0]=(c3[0]*11/2)%10;
	 }
	}
	for(int c=0;c<b3;c++){
	 if(d>1){
		for(int e=0;e<d;e++){
			d2=c3[e]*10+c3[(e+1)%d];
			c4[(e-1+d)%d]+=d2/5/10;
			c4[e]+=d2/5%10;
			c3[e]=0;
			c3[(e+1)%d]=d2%5;
		}
		for(int f=0;f<d;f++){
			c3[f]=c4[f];
		}
   }else if(b!=1){
   	c3[0]=(c3[0]*11/5)%10;
	 }
	}
	for(int f=0;f<d;f++){
		if(c3[f]!=0){
			r=1;
		}
	}
 if(r==1){
	cout<<'(';
	for(int h=0;h<d;h++){
		cout<<c3[h];
		if(int(h+max(0.0,log10(a/b))+3)%76==75){
			cout<<endl;
		}
	}
	cout<<')';
 }
}
2023/9/1 16:55
加载中...