2-06. 数列求和
时间限制
50 ms
内存限制
32000 kB
代码长度限制
8000 B
判题程序
Standard
给定某数字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 |
测试点 | 结果 | 用时(ms) | 内存(kB) | 得分/满分 |
---|---|---|---|---|
0 | 答案正确 | 0 | 790 | 1/1 |
1 | 答案正确 | 0 | 790 | 1/1 |
2 | 答案正确 | 0 | 880 | 1/1 |
3 | 运行超时 | 0/1 |
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char A;
int N;
void add(char a[], char b[])
{
int lengthb;
int i,j;
int temp;
int flag;
lengthb = strlen(b);
flag = 0;
for(i=lengthb-1, j=10009; i>=0; i--, j--)
{
temp = b[i] - '0' + a[j] - '0' + flag;
if(temp > 9)
{
a[j] = temp - 10 + '0';
flag = 1;
}
else
{
a[j] = temp + '0';
flag = 0;
}
}
if(flag == 1)
{
a[j] = '1';
}
}
int main()
{
int i;
int j;
char a[10010];
char b[10010];
memset(a, '0', sizeof(a));
scanf("%c%d",&A,&N);
if(N == 0)
printf("0\n");
else
{
for(i=1; i<=N; i++)
{
for(j=0; j<i; j++)
{
b[j] = A;
}
b[j] = '\0';
add(a,b);
}
//printf("%s\n",a);
for(i=0; a[i]=='0'; i++);
for(j=i; j<10010; j++)
printf("%c",a[j]);
}
return 0;
}
测试点 | 结果 | 用时(ms) | 内存(kB) | 得分/满分 |
---|---|---|---|---|
0 | 答案正确 | 0 | 790 | 1/1 |
1 | 答案正确 | 0 | 790 | 1/1 |
2 | 答案正确 | 0 | 740 | 1/1 |
3 | 答案正确 | 10 | 970 | 1/1 |
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int A;
int N;
int main()
{
int i;
int j;
int temp;
int flag;
int num[1000000];
scanf("%d%d",&A,&N);
if(N == 0)
printf("0\n");
else
{
flag = 0;
for(i=N, j=0; i>=1; i--, j++)
{
temp = A*i + flag;
flag = temp / 10;
num[j] = temp % 10;
}
if(flag > 0){
num[j] = flag;
j++;
}
for(i=j-1; i>=0; i--)
{
printf("%d",num[i]);
}
}
return 0;
}