《信息学奥赛一本通》高精除以高精,求它们的商和余数。
生活随笔
收集整理的這篇文章主要介紹了
《信息学奥赛一本通》高精除以高精,求它们的商和余数。
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
代碼
#include <cstdio> #include <iostream> #include <cstring> using namespace std; int a[101],b[101],c[101],d,i; void init (int a[]) {//讀入字符串s,用a[0]計算字符串s的位數(shù),將數(shù)串s轉(zhuǎn)換為數(shù)組a,并倒序存儲。string s;cin>>s;//讀入字符串sa[0]=s.length();//用a[0]計算字符串s的位數(shù)for(i=1;i<=a[0];i++);{//將數(shù)串s轉(zhuǎn)換為數(shù)組a,并倒序存儲a[i]=s[a[0]-i]-'0';} } void print(int a[]) {//打印輸出int i;if(a[0]==0){cout<<0<<endl;return ;}for(i=a[0];i>0;i--){cout<<a[i];}cout<<endl;return ; } int compare(int a[],int b[]) {//比較a和b的大小關(guān)系,若a>b則為1,若a<b則為-1,若a=b則為0int i;if(a[0]>b[0]){return 1;}if(a[0]<b[0]){return -1;}for(i=a[0];i>0;i--){if(a[i]>b[i]){return 1;}if(a[i]<b[i]){return -1;}}return 0; } void jian(int a[],int b[]) {int flag,i;flag=compare(a,b);//調(diào)用比較函數(shù)判斷大小if(flag==0){a[0]=0;return ;}if(flag==1){for(i=1;i<=a[0];i++){if(a[i]<b[i]){//若不夠減則向上借一位a[i+1]--;a[i]+=10;}a[i]-=b[i];}while(a[0]>0&&a[a[0]]==0){//修正a的位數(shù)a[0]--;}return ;} } void numcpy(int p[],int q[],int det) {//復(fù)制p數(shù)組到q數(shù)組從det開始的地方for(int i=1;i<=p[0];i++){q[i+det-1]=p[i];}q[0]=p[0]+det-1; } void chugao(int a[],int b[],int c[]) {int i,tmp[101];c[0]=a[0]-b[0]+1;for(i=c[0];i>0;i--){memset(tmp,0,sizeof(tmp));//數(shù)組清零numcpy(b,tmp,i);while (compare(a,tmp)>0){//用減法來模擬c[i]++;jian(a,tmp);}}while(c[0]>0&&c[c[0]]==0){c[0]--;}return ; } int main () {memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));init(a);init(b);chugao(a,b,c);print(c);print(a);return 0; }總結(jié)
以上是生活随笔為你收集整理的《信息学奥赛一本通》高精除以高精,求它们的商和余数。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《信息学奥赛一本通》 高精除以低精。输入
- 下一篇: 《C champion》C语言的优点和缺