《数据结构学习与实验指导》2-6:数列求和

来源:互联网 发布:gas mask mac 下载 编辑:程序博客网 时间:2024/05/16 04:31

实验内容:给定某整数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。
输出说明:输出S的值。
测试用例:
1 3 | 123
6 100 | 7407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407340
1 0 | 0

#include <stdio.h>#include <stdlib.h>int main() {    int A, N;    scanf("%d %d", &A, &N);    int *arr = (int *) malloc((N + 1) * sizeof(int));    for (int i = 0; i <= N; i++) {        *(arr + i) = 0;    }    for (int i = N; i >= 1; i--) {        *(arr + i) += i * A;        *(arr + i - 1) += *(arr + i) / 10;        *(arr + i) %= 10;    }    if (N == 0) {        printf("0");    } else {        int i = 0;        if (*(arr) == 0) {            i = 1;        }        for (; i <= N; i++) {            printf("%d", *(arr + i));        }    }    printf("\n");    free(arr);    return 0;}

另一方法:使用递归

#include <stdio.h>void recurse(int A, int N, int i, int carry);int main() {    int A, N;    scanf("%d %d", &A, &N);    if (N == 0) {        printf("0\n");        return;    }    recurse(A, N, N, 0);    printf("\n");    return 0;}void recurse(int A, int N, int i, int carry) {    if (i == 0) {        if (carry != 0) {            printf("%d", carry);        }    } else {        int num = i * A + carry;        carry = num / 10;        recurse(A, N, i - 1, carry);        num = num % 10;        printf("%d", num);    }}
阅读全文
0 0
原创粉丝点击