轉載請註明出處:優YoU
http://user.qzone.qq.com/289065406/blog/1309151264
大致題意:
在b進位下,求p%m
其中p為b進位大數1000位以內,m為b進位數9位以內
解題思路:
以字串形式儲存p,m
利用進位轉換公式先把m逐位轉換為10進位,由於m只有9位,因此直接轉換用int儲存即可。
再利用進位轉換公式把p逐位轉換為10進位,為了避免處理大數,轉換過程中,若出現比m大的時候,則對m模數,繼續轉換。根據同餘模公式知,這是允許的。
此時得到的p值就是 (10進位p)%(10進位m)
當p==0時,直接輸出,否則把p逐位轉換回去n進位再輸出。
n進位的p必須用數組儲存,因為10進位的p雖然不是大數,但n進位就不一定。
PS:不要用大數去做,當p>>m時,會逾時的。
//Memory Time //256K 32MS #include<iostream>#include<string.h>using namespace std;const int size=1000; //大數位元int main(void){int n; //進位數while(cin>>n && n){char* Stra=new char[size+1]; //字串n進位被減數char* Strb=new char[size+1]; //字串n進位減數int pa=0; //Stra[]指標int Diga=0,Digb=0; //數字10進位被減數、減數cin>>Stra>>Strb;for(int j=0;Strb[j];j++) //把n進位字串減數 轉換為 10進位數字減數{Digb*=n;Digb+=Strb[j]-'0';}for(int i=0;Stra[i];i++) //把n進位字串被減數 轉換為 10進位數字被減數{Diga*=n;Diga+=Stra[i]-'0';if(Diga>=Digb) //同餘模公式,為避免大數計算,進位轉化時順便求模Diga%=Digb;}if(!Diga)cout<<0<<endl;else{while(Diga) //把10進位數字模 轉換為 n進位字串模{Stra[pa++]=Diga%n+'0';Diga/=n;}for(pa--;pa>=0;pa--)cout<<Stra[pa];cout<<endl;}delete Stra;delete Strb;}return 0;}