【程序18】 题目:求s = a + aa + aaa + aaaa + aa...a的值,其中a是一个数字。例如2 + 22 + 222 + 2222 + 22222(此时 共有5个数相加),几个数

初试版本

存在的问题:数组内存大小固定,无法动态改变

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

/*
【程序18】
题目:求s = a + aa + aaa + aaaa + aa...a的值,其中a是一个数字。例如2 + 22 + 222 + 2222 + 22222(此时
共有5个数相加),几个数相加有键盘控制
*/

int main(void){
	int all = 0, num = 0;
	int count = 0;
	int s = 0;
	int number[10] = { 0 };
	printf("几个数相加?什么数?\n");
	scanf("%d %d", &all, &num);
	for (count = 0; count < all; count++)
	{
		number[count] += num;
		s += number[count];
		number[count + 1] = number[count] * 10;
	}
	number[all] = '\0';

	for (count = 0; count < (all - 1); count++)
	{
		printf("%d + ",number[count]);
	}
	printf("%d = %d\n", number[count], s);
	return 0;
}

修改后

分配空间函数

int *get_number(int all){
	int *temp_number = NULL;
	//分配空间
	temp_number = (int *)malloc((all + 1) * sizeof(int));
	if (temp_number == NULL)
	{
		fprintf(stderr, "temp_number malloc err\n");
		return NULL;
	}
	//初始化
	memset(temp_number, 0, (all + 1) * sizeof(int));
	return temp_number;
}

释放空间函数

//释放分配空间
void free_number(int *number){
	if (number == NULL)
	{
		return;
	}
	free(number);
	number = NULL;
	return;
}

全部程序

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//给数组分配动态内存
int *get_number(int all){
	int *temp_number = NULL;
	//分配空间
	temp_number = (int *)malloc((all + 1) * sizeof(int));
	if (temp_number == NULL)
	{
		fprintf(stderr, "temp_number malloc err\n");
		return NULL;
	}
	//初始化
	memset(temp_number, 0, (all + 1) * sizeof(int));
	return temp_number;
}

//释放分配空间
void free_number(int *number){
	if (number == NULL)
	{
		return;
	}
	free(number);
	number = NULL;
	return;
}
int main(void){
	int all = 0, num = 0;
	int count = 0;
	int s = 0;
	int *number = NULL;
	printf("几个数相加?什么数?\n");
	scanf("%d %d", &all, &num);
	number = get_number(all);

	for (count = 0; count < all; count++)
	{
		number[count] += num;
		s += number[count];
		number[count + 1] = number[count] * 10;
	}
	number[all] = '\0';
	
	for (count = 0; count < (all - 1); count++)
	{
		printf("%d + ", number[count]);
	}
	printf("%d = %d\n", number[count], s);
	free_number(number);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43328180/article/details/86231875