思路
- 注意进位,尤其是第二位也可能向前进位
代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int* plusOne(int* digits, int digitsSize, int* returnSize){
int i,flag=0;
int len = digitsSize;
digits[digitsSize-1]++;
for(i=digitsSize-1;i>0;i--){
int temp = (digits[i]+flag)%10;
flag = (digits[i]+flag)/10;
digits[i] = temp;
}
int *res;
digits[0]=digits[0]+flag;//这个地方注意,第二位还可能会进位
if(digits[0]>=10){
res = (int *)malloc((digitsSize+1)*sizeof(int));
len++;
}
else
res = (int *)malloc((digitsSize)*sizeof(int));
if(len == digitsSize)
for(i=len-1;i>=0;i--)
res[i] = digits[i];
else{
for(i=len-1;i>=1;i--){
res[i] = digits[i-1];
}
res[1]=res[1]%10;
res[0] = 1;
}
*returnSize = len;
return res;
}
int main(){
int d4[4] = {4,3,2,1};
int d1[2] = {9,9};
int len=0;
int *res = plusOne(d1,2,&len);
printf("len = %d\n",len);
for(int i=0;i<len;i++)
printf("%d ",res[i]);
printf("\n");
}