【計蒜客系列】挑戰難題19:加一

題目來源:計蒜客


動態數組存放了一些個位數字(正數),組成一個大數。將這個數加1。
例如:
A = [2,3,1,1,4],
return [2,3,1,1,5]
A = [7,8,9],
return [7,9,0].
格式:
第一行輸入一個正整數n,接下來的一行,輸入數組A[n](每一位都是正數且爲個位數)。
最後輸出新的數組。
樣例1
輸入:
5
8 9 9 9 9
輸出:
9 0 0 0 0

注:此題只需要考慮最後一位加一後最後一位是否爲10,如果爲10需要考慮進位,並置最後一位爲0,即只有最後一位爲9,加一後需要進位。進位後,首位如果爲10表明原數的位數需要增加,即9 9 9 9 9變爲1 0 0 0 0 0。

#include <stdio.h>
#include <malloc.h>
int main(int argc, char **argv) {
	int i, n;
	scanf("%d", &n);
	int *a = (int *) malloc(n * sizeof(int));

	for (i = 0; i < n; i++) {
		scanf("%d", &a[i]);
	}

	a[n-1] += 1;
	if(a[n-1] == 10)
	{
		for (i = n-1; i > 0; i--)
		{
			if (a[i] == 10)
			{
				a[i] = 0;
			    a[i-1] += 1;
			}
		}

		if (a[0] == 10) {
			printf("1 ");
		    for (i = 1; i < n; i++)
		    	printf("0 ");
		    printf("0");
		} else {
			for (i = 0; i < n - 1; i++)
				printf("%d ",a[i]);
			printf("%d",a[n-1]);
		}
	}else{
		for(i=0;i<n;i++)
			printf("%d ",a[i]);
	}
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章