大數相加,高精度階乘,大整數進位轉換,大整數判斷被小整數整除(JOJ–1029)

來源:互聯網
上載者:User
#include <iostream>#include <string>#include <sstream>#include <vector>using namespace std;string Add(string &a,string&b){stringstream ss;string ans;int carry;int i,j,k;int add1,add2,sum;i=a.size()-1;j=b.size()-1;k=i>j?i:j;if(i>j) ans=a; else ans=b;for(carry=0;k>=0;i--,j--,k--){add1 = i<0 ? 0 : a[i]-'0';add2 = j<0 ? 0 : b[j]-'0';sum = (add2 + add1 + carry>=10)?add1+add2+carry-10:add1+add2+carry;carry = (add1 + add2 + carry >=10) ? 1:0;ans[k]=sum+'0';}if(carry)ss<<"1";ss<<ans;ss>>ans;return ans;}int main(){string a,b;int count = 0;vector<string> result;string ans;cin>>count;int t = 0;for(t = 0; t<count; t++){cin>>a>>b;result.push_back(Add(a,b));}for(t = 0; t<count-1; ++t){cout<<"Case "<<t+1<<":"<<endl;cout<<result.at(t)<<endl;cout<<endl;}cout<<"Case "<<t+1<<":"<<endl;cout<<result.at(t)<<endl;return 0;}

-------------

#include <cstdlib>#include <iostream>using namespace std;const int MAX=180;const int N=120;int main(int argc, char *argv[]){int s[MAX+1],val,carry;int i = 0;for(i=0;i<=MAX;++i)s[i]=0;s[MAX]=1;for(i=2;i<=N;++i){carry=0;for(int c=MAX;c>=0;--c){val=s[c]*i+carry;s[c]=val%10;carry=val/10;}}for(i = 0; s[i] == 0;++i);for(;i<=MAX;++i)cout<<s[i];cout<<endl;system("PAUSE");return EXIT_SUCCESS;}

-------------

/*高精度進位轉換 把oldBase 進位的數轉化為newBase 進位的數輸出。調用方法,輸入str, oldBase newBase.change();solve();output();也可以修改output(),使符合要求,或者存入另外一個字元數組,備用 */#include<stdio.h>#include<string.h>#define MAXSIZE 100char str[MAXSIZE];//輸入字串int start[MAXSIZE],ans[MAXSIZE],res[MAXSIZE];//被除數,商,餘數int oldBase,newBase;//轉換前後的進位//單個字元得到數字int getNum(char c)//這裡進位字元是先數字,後大寫字母,後小寫字母的 {if(c>='0'&&c<='9') return c-'0';//數字 if(c>='A'&&c>='Z') return c-'A'+10;//大寫字母 return c-'a'+36;//小寫字母 }    //數字得到字元char getChar(int i){if(i>=0&&i<=9)return i+'0';if(i>=10&&i<=35)return i-'10'+'A';return i-36+'a';}     void change()//把輸入的字串的各個數位還原為數字形式{int i;start[0]=strlen(str);//數組的0位存的是數組長度for(i=1;i<=start[0];i++)start[i]=getNum(str[i-1]); }    void solve(){memset(res,0,sizeof(res));//餘數位初始化為空白int y,i,j;while(start[0]>=1) {y=0;i=1;ans[0]=start[0];while(i<=start[0]){y=y*oldBase+start[i];ans[i++]=y/newBase;y%=newBase;}    res[++res[0]]=y;//這一輪得到的餘數i=1;//找下一輪商的起始處,去掉前面的0while(i<=ans[0]&&ans[i]==0) i++;memset(start,0,sizeof(start));for(j=i;j<=ans[0];j++)start[++start[0]]=ans[j];memset(ans,0,sizeof(ans)); }    }  void output()//從高位到低位逆序輸出 {int i;for(i=res[0];i>=1;i--)printf("%c",getChar(res[i]));printf("\n");}void main(){scanf("%s%d%d", str, &oldBase, &newBase);change();solve();output();}

------------------

#include <iostream>#include <string>#include <vector>using namespace std;const int MAXSIZE = 100;int start[MAXSIZE],ans[MAXSIZE],res[MAXSIZE];int ChuBase(const string& str){int base=0;start[0]=str.size();//數組的0位存的是數組長度for(int i=1;i<=start[0];i++){start[i]=str[i-1]-'0';base+=start[i];}return base;}bool judge(const int& oldBase,const int& newBase){if(newBase==1)return true;int y=0,i=1;int size = res[0];while(i <= size){y=y*oldBase+res[size-i+1];//注意此時的res是逆序的y%=newBase;++i;}    if(y==0)return true;elsereturn false;}void solve(const int& oldBase,const int& newBase){memset(res,0,sizeof(res));//餘數位初始化為空白int y,i,j;while(start[0]>=1) {y=0;i=1;ans[0]=start[0];while(i<=start[0]){y=y*oldBase+start[i];ans[i++]=y/newBase;y%=newBase;}    res[++res[0]]=y;//這一輪得到的餘數i=1;//找下一輪商的起始處,去掉前面的0while(i<=ans[0]&&ans[i]==0) i++;memset(start,0,sizeof(start));for(j=i;j<=ans[0];j++)start[++start[0]]=ans[j];memset(ans,0,sizeof(ans)); }    }  void print(vector<bool>::const_iterator beg, vector<bool>::const_iterator end){while(beg != end){if(*beg++)cout<<"yes"<<endl;elsecout<<"no"<<endl;}}int main(){int oldBase;string str;int count;cin>>count;vector<bool> bvec;vector<vector<bool> > bbvec;while(cin>>oldBase){if(oldBase==0)break;cin>>str;int base = ChuBase(str);solve(oldBase, 10);bvec.push_back(judge(10, base));}bbvec.push_back(bvec);bvec.clear();for(int i=1;i<count;i++){getline(cin,str);while(cin>>oldBase){if(oldBase==0)break;cin>>str;int base = ChuBase(str);solve(oldBase, 10);bvec.push_back(judge(10, base));}bbvec.push_back(bvec);bvec.clear();}vector<vector<bool> >::const_iterator iter = bbvec.begin();for(int j=0; j<count-1; j++){print((*iter).begin(), (*iter).end());cout<<endl;++iter;}print((*iter).begin(), (*iter).end());return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.