給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。
最高位數字存放在數組的首位, 數組中每個元素只存儲單個數字。
你可以假設除了整數 0 之外,這個整數不會以零開頭。
示例 1:
輸入: [1,2,3] 輸出: [1,2,4] 解釋: 輸入數組表示數字 123。
示例 2:
輸入: [4,3,2,1] 輸出: [4,3,2,2] 解釋: 輸入數組表示數字 4321。
/**
給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。
最高位數字存放在數組的首位, 數組中每個元素只存儲單個數字。
你可以假設除了整數 0 之外,這個整數不會以零開頭。
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
/**
思路一:將數組轉換爲long 類型,然後加以在分解存在越界問題(不採用)
思路二:從最高位遍歷數組
*/
#include<stdio.h>
#include <stdlib.h>
int* plusOne(int* digits, int digitsSize, int* returnSize){
*returnSize = digitsSize;
if(digits[digitsSize-1] < 9){
digits[digitsSize-1] +=1;
return digits;
}else{
digits[digitsSize-1] = 0;
}
int lock =1;
int temp = 0;
for(int i = digitsSize-2 ; i>=0 ; --i ){
if(digits[i] < 9){
digits[i] += 1;
break;
}
if(digits[i] == 9 && i!= 0){
digits[i] = 0;
}else if(digits[i] == 9&& i== 0){
temp =1;
digits[i] = 0 ;
}
}
if(temp ==1 || digitsSize ==1){
*returnSize += 1;
int *result = (int *)malloc((*returnSize)*sizeof(int));
result[0] = 1;
for(int i =0;i<digitsSize;++i){
result[i+1] = digits[i];
}
return result;
}else
return digits;
}
int main(void)
{
int l1 ,leng;
printf("Please Input array len :\n");
scanf("%d",&l1);
int * arr = (int * )malloc(l1*sizeof(int));
int i = 0;
printf("l1 == %d",l1);
while(i<l1){
scanf("%d",&arr[i++]);
}
int * result = plusOne(arr,l1,&leng);
for(int i = 0 ; i< leng;++i){
printf("%d",result[i]);
}
return 0;
}