大数模板

数字阶梯求和

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;
}
全部评论

相关推荐

过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
10-09 22:05
666 C++
找到工作就狠狠玩CSGO:报联合国演讲,报电子烟设计与制造
点赞 评论 收藏
分享
蚂蚁 基架java (n+6)*16 签字费若干
点赞 评论 收藏
分享
评论
4
收藏
分享
牛客网
牛客企业服务