求任意數的任意次方(C++)

來源:互聯網
上載者:User

Source Code

Problem: 1001

Memory: 244K
Time: 47MS

Language: C++
Result: Accepted

  • Source Code
    #include <iostream>#include <string>#include <algorithm>using namespace std;string multiWithChar(string a,char b);string multiWithString(string a,string b);string addWithString(string a,string b);int getPointNum(string a,int r);string deletePoint(string);string deleteInsignificant(string);string Exponentiation(string,int);string recoverPoint(string,int);string solve(string,int);int main(){string s;int n;while(cin>>s>>n){cout<<solve(s,n)<<endl;}return 0;}string solve(string a, int r){int pointnum=getPointNum(a,r);return deleteInsignificant(recoverPoint(Exponentiation(deletePoint(a),r),pointnum));}string multiWithChar(string a,char b_){int len=a.length();int up=0;int b=b_-'0';string ret="";for (int i=len-1;i>=0;i--){int w=(a.at(i)-'0')*b;ret.append(1,(up+w)%10+'0');up=(w+up)/10;}if(up!=0)ret.append(1,up+'0');std::reverse(ret.begin(),ret.end());return ret;}string multiWithString(string a,string b){string ret="";int appnum=0;for (int i=b.length()-1;i>=0;i--){string temp=multiWithChar(a,b.at(i));temp.append(appnum++,'0');ret=addWithString(ret,temp);}return ret;}string addWithString(string a,string b){if(a=="")return b;if(b=="")return a;string temp;if(a.length()<b.length()){temp=a;a=b;b=temp;}int maxlen=a.length();int minlen=b.length();int up=0;string ret="";for (int i=maxlen-1,j=minlen-1;i>=0;i--,j--){int w=((j<0)?0:(b.at(j)-'0'))+(a.at(i)-'0');ret.append(1,(up+w)%10+'0');up=(w+up)/10;}if(up!=0)ret.append(1,up+'0');std::reverse(ret.begin(),ret.end());return ret;}int getPointNum(string a,int r){int pos=a.find('.');if(pos==-1)return 0;return (a.length()-1-pos)*r;}string deletePoint(string s){int pos=s.find('.');if(-1==pos)return s;return s.substr(0,pos).append(s.substr(pos+1));}string deleteInsignificant(string s){if(s.find('.')==-1)return s;int i=s.length();while (s.at(i-1)=='0'){i--;}if(s.at(i-1)=='.')i--;if(s.at(0)=='0')s=s.substr(1,i);return s.substr(0,i);}string Exponentiation(string r,int n){string ret="";if(n==1)return r;if(n==2){return multiWithString(r,r);}else if(n%2==0){return Exponentiation(Exponentiation(r,2),n/2);}else {return multiWithString(r,Exponentiation(r,n-1));}}string recoverPoint(string s,int pointnums){if(!pointnums)return s;s=s.insert(s.length()-pointnums,".");return s;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.