7-38 数列求和-加强版(20 分)
给定某数字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 3
输出样例:
123
代码如下
#include <stdio.h>
#include <stdlib.h>
struct number{
int num;
struct number *next;
};
void print(struct number *head);
int main()
{
struct number *head, *p, *tail;
int a, n, i;
head = tail = (struct number *)malloc(sizeof(struct number));
tail->num = 0;
tail->next = NULL;
scanf("%d %d", &a, &n);
if(n == 0)
printf("0");
else
{
for(i = n; i >= 1; i--)
{
p = (struct number *)malloc(sizeof(struct number));
p->num = (a * i + tail->num) / 10;
p->next = NULL;
tail->num = (a * i + tail->num) % 10;
if(i == 1 && p->num == 0)
;
else
{
tail->next = p;
tail = p;
}
}
/* while(tail->num >= 10)
{
p = (struct number *)malloc(sizeof(struct number));
p->num = tail->num / 10;
tail->num = tail->num % 10;
p->next = NULL;
tail->next = p;
tail = p;
}
*/
print(head);
}
printf("\n");
return 0;
}
void print(struct number *p)
{
if(p->next != NULL)
print(p->next);
printf("%d",p->num);
}