题目1051:数字阶梯求和
#include <stdio.h>
#include <iostream>
typedef struct BigInt BigInt;
struct BigInt{
int digit[1000];
int size;
void init(){
for(int i=0;i<1000;i++){
digit[i]=0;
}
size=0;
}
void set(int a,int n){
init();
int j=0,t=0,c=1;
for(int i=n-1;i>=0;i--){
t+=a*c;
j++;c*=10;
if(j==4||i==0){
digit[size]=t;
size++;j=0;t=0;c=1;
}
}
}
void output()
{
for(int i=size-1;i>=0;i--){
if(i!=size-1)
printf("%04d",digit[i]);
else
printf("%d",digit[i]);
}
printf("\n");
}
BigInt operator +(const BigInt &A)const{
BigInt res;res.init();
int carry=0;
for(int i=0;i<A.size||i<size;i++){
int tmp=A.digit[i]+digit[i]+carry;
carry=tmp/10000;
tmp%=10000;
res.digit[res.size]=tmp;
res.size++;
}
if(carry!=0){
res.digit[res.size++]=carry;
}
return res;
}
};
int main(){
int a=0,n=0;
while (~scanf("%d %d",&a,&n)){
BigInt res,x;
res.init();
res.set(0,1);
for(int i=1;i<=n;i++)
{
x.init();
x.set(a,i);
res=res+x;
}
res.output();
}
return 0;
}
/**************************************************************
Problem: 1051
User: 爱理momoko
Language: C++
Result: Accepted
Time:0 ms
Memory:1520 kb
****************************************************************/