题目来源: http://www.patest.cn/contests/ds/2-06
给定某数字A(1<=A<=9)以及非负整数N(0<=N<=100000),求数列之和S = A + AA + AAA + … + AA…A(N个A)。例如A=1, N=3时,S = 1 + 11 + 111 = 123。
输入格式说明:
输入数字A与非负整数N。
输出格式说明:
输出其N项数列之和S的值。
样例输入与输出:
序号 | 输入 | 输出 |
1 |
1 3 |
123 |
2 |
6 100 |
7407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407340 |
3 |
1 0 |
0 |
java解有一个测试点运行超时,只需要改成c++或c版本即可全部通过
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.Map.Entry;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author chenhong
* */
public class Main {
public static void main(String[] args) {
int[] a = new int[100002];
Scanner scanner = new Scanner(System.in);
short A = scanner.nextShort();
int n = scanner.nextInt();
if(n==0)
{
System.out.println(0);
return ;
}
int value =0; //值
int state = 0; //进位标志
int j =0; //数组a的下标
//从计算最低位开始
for(int i=n;i>=1;i--)
{
value = A*i+state;
state = value/10;
value = value%10;
a[j++]=value;
}
//如果还有进位
if(state>0)
{
a[j]=value;
}
//输出各位的值
for(int i=j-1;i>=0;i--)
{
System.out.print(a[i]);
}
}
}