大数模板
数字阶梯求和
http://www.nowcoder.com/questionTerminal/c66df29f6c1c4dbba0bd51619210e082
#include<iostream> #include<string> #include<algorithm> using namespace std; //此题类似于快速幂和大数乘法,大数加法的结合 //大数加法 string addString(string a,string b) { string res; int carry=0; int i=a.size()-1; int j=b.size()-1; while(i>=0 && j>=0) { int num=carry+a[i]-'0'+b[j]-'0'; res+=num%10+'0'; carry=num/10; i--;j--; } while(i>=0) { int num=carry+a[i]-'0'; res+=num%10+'0'; carry=num/10; i--; } while(j>=0) { int num=carry+b[j]-'0'; res+=num%10+'0'; carry=num/10; j--; } if(carry>0) res+=to_string(carry); reverse(res.begin(),res.end()); return res; } //大数乘法(x<=10) string mulString(string a,int x) { int carry=0; string res; for(int i=a.size()-1;i>=0;i--) { int num=carry+(a[i]-'0')*x; res+=num%10+'0'; carry=num/10; } if(carry>0) res+=to_string(carry); reverse(res.begin(),res.end()); return res; } //myAdd类似于快速幂 string myAdd(int a,int n) { string res="0"; string temp=to_string(a); for(int i=0;i<n;i++) { res=addString(res,temp); temp=mulString(temp,10); temp=addString(temp,to_string(a)); } return res; } int main() { int a,n; while(cin>>a>>n) { cout<<myAdd(a,n)<<endl; } return 0; }