题意:计算 1*a^1+2*a^2+...+n*a^n的和
解法:C++高精度:
#include<cstring>
#include<iostream>
#include<string>
#include<stdio.h>
#define MAXN 500
using namespace std;
class bigNumber //bigNumber类的声明
{
private: //私有部分:长度为len的高精度数组a
int a[MAXN];
int len;
public:
bigNumber() //a数组初始化为0
{
memset(a,0,sizeof(a));
len=1;
}
int length() //返回高精度数组a的长度
{
return len;
}
int at(int k) //返回a[k]
{
if(0<=k&&k<len) return a[k];
return -1;
}
void setnum(char s[]) //将字符串s[]转换成长度为len的高精度数组a
{
len=0;
for(int i=strlen(s)-1;i>=0;i--)
a[len++]=(int)(s[i]-'0');
}
bool isZero() //判断高精度数组a是否为0
{
return len==1&&a[0]==0;
}
void add(bigNumber &x) //高精度加法运算:a<-a+x
{
for(int i=0;i<x.len;i++) //逐位相加
{
a[i]+=x.a[i];
a[i+1]+=a[i]/10;
a[i]%=10;
}
int k=x.len; //处理高位的进位
while(a[k])
{
a[k+1]+=a[k]/10;
a[k++]%=10;
}
len=len>k?len:k; //计算和的实际位数
}
void multi(bigNumber &x) //高精度乘法运算:a<-a*x
{
if(x.isZero()) setnum("0");
int product[MAXN];
memset(product,0,sizeof(product));
for(int i=0;i<len;i++)
//被乘数a与乘数x的每位数字的乘积累加到积数组product的对应位置上
for(int j=0;j<x.length();j++)
product[i+j]+=a[i]*x.at(j);
int k=0; //按照低位至高位的顺序,将每一位规范为十进制数
while(k<len+x.length()-1)
{
product[k+1]+=product[k]/10;
product[k++]%=10;
}
while(product[k]) //处理高位端的进位
{
product[k+1]+=product[k]/10;
product[k++]%=10;
}
len=k; //设置乘积数位的长度
memcpy(a,product,sizeof(product));
}
};
int main()
{
int n;
char s[MAXN];
while(~scanf("%d%s",&n,s)) //、
{
bigNumber a,ap;
a.setnum(s);
ap.setnum("1");
bigNumber sum;
for(int i=1;i<=n;i++)
{
bigNumber num;
sprintf(s,"%d",i); //将i转换为高精度数组num
num.setnum(s);
ap.multi(a);
num.multi(ap);
sum.add(num);
}
for(int i=sum.length()-1;i>=0;i--)
printf("%d",sum.at(i));
puts("");
}
return 0;
}
JAVA 大数类
import java.math.*;
import java.io.*;
import java.util.*;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(new BufferedInputStream(System.in));
int n,a;
while(in.hasNextInt()){
n=in.nextInt();
a=in.nextInt();
BigInteger sum=new BigInteger("0");
BigInteger AA=new BigInteger("1");
int i;
for(i=1;i<=n;i++){
AA=AA.multiply(new BigInteger(""+a));
sum=sum.add(AA.multiply(new BigInteger(""+i)));
}
System.out.println(sum.toString());
}
}
}