题目链接:7-38 数列求和-加强版
一. 题目
1. 题目
2. 输入输出样例
3. 限制
二、代码
1. 代码实现
#include <stdio.h>
#include <string.h>
#include <malloc.h>
void addTerm(char *sum, int A, int N);
int main() {
int A, N;
char *sum;
// 读取输入
if (scanf("%d %d", &A, &N) != 2) {
return -1;
}
sum = calloc(N + 1, sizeof(char)); // 多分配一个字符给结束符'\0'
addTerm(sum, A, N);
// 若 N == 0
if (!N) {
sum[0] = '0';
}
printf("%s", sum);
free(sum);
return 0;
}
void addTerm(char *sum, int A, int N) {
int carry = 0;
int digitSum;
int i;
// 从最低位开始逐位相加
for (i = N - 1; i >= 0; i--) {
digitSum = (i + 1) * A + carry; // 第i位的值为(i + 1) * A,再加进位
sum[i] = (digitSum % 10) + '0';
carry = digitSum / 10;
}
// 如果还有进位
if (carry) {
printf("%d", carry);
}
}