PKU ACM 1001(大數相乘)

來源:互聯網
上載者:User
//大數相乘#include <iostream>#include <string>#include <cstdio>using namespace std;class ans//求s^n{private:string s;int n;int r;//小數點位元private:string result(int n){if(n == 0)return "1";if(n == 1)return s;if(n%2 == 0)return mul(result(n/2), result(n/2));else return mul(mul(result(n/2),result(n/2)), result(1));}void erase(){s.erase(s.find_first_of('.'),1);}void ltrim(){for(int i = 0; i < s.length(); i++){if(s[i] == '0'){s.erase(i,1);i--;}elsebreak;}if(s.length() == 0)s = "0";}void rtrim(){for(int i = s.length() - 1; i >= 0; i--){if(s[i] == '0')s.erase(i,1);elsebreak;}}string rtrim(string s){for(int i = s.length() - 1; i >= 0; i--){if(s[i] == '0')s.erase(i,1);elsebreak;}return s;}public:ans(string ss,int an):n(an),s(ss){//s = ::rtrim(ss);if(s.find_first_of('.') != string::npos){r = s.length() - s.find_first_of('.') - 1;erase();}elser = 0;ltrim();}string add(string s1,string s2){if(s1.length() < s2.length()){swap<string>(s1,s2);}int k = s2.length() - 1;int len = s1.length();int t,c = 0;for(int i = len - 1, j = 0; i >= 0; i--, j++){if(k - j >= 0){t = s1[i] - '0' + s2[k-j] - '0' + c;c = 0;if(t >= 10) c = 1;s1[i] = t%10 + '0';}else{t = s1[i] - '0' + c;c = 0;if(t >= 10) c = 1;s1[i] = t%10 + '0';}}if(c == 1)s1.insert(0,"1");return s1;}string mul(string s,int n)//0 <= n <= 9{if(n == 0)return "0";int c = 0,t = 0;for(int i = s.length() - 1; i >= 0; i--){t = (s[i] - '0')*n + c;s[i] = t%10 + '0';c = t/10;}if(c > 0)s.insert(0,1,char(c+'0'));return s;}string mul(string s1,string s2){string ts="0",result="";for(int i = 0; i < s1.length(); i++){ts = mul(s2, s1[i] - '0');result.insert(result.length(),1,'0');result = add(result, ts);}return result;}string mul(){return mul(s,s);}string result(){string s = result(n);int x = r * n;if(s.length() >= x)s.insert(s.length() - r * n,1,'.');else{s.insert(0,x - s.length(),'0');s.insert(0,1,'.');}s = rtrim(s);if(s[s.length() - 1] == '.')s.erase(s.length() - 1,1);if(s.length() == 0)s = "0";return s;}};int main(){string s;int n;//freopen("in.txt","r",stdin);while(cin>>s>>n){ans as(s,n);cout<<as.result()<<endl;}    return 0; }

測試資料如下:

95.123 12
0.4321 20
5.1234 15
6.7592  9
98.999 10
1.0100 12
12345. 2
2.0000 4
01.1000  2
0.0 2
100.0 2
0.100 2
000 2
.000 2
100.00 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.