1
2
|
Given a non-negative number represented as an array of digits, plus one to the number.
The digits are stored such that the most significant digit is at the head of the list.
|
题意:一个非负的整数用数组的形式保存着。其中高位在a[0]。然后对这个数做加1操作,返回这个数组。
PS:原谅我又么有读懂题意---!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int
* plusOne(
int
* digits,
int
digitsSize,
int
* returnSize) {
int
i;
int
index=0;
int
carry=0;
int
flag=1;
//感觉是偷了个懒,只有全是9的时候才进1.。。。。。所以
//只有个位数加1,不是每个都加,所以用flag
for
(i=digitsSize-1;i>=0;i--){
//不是每个都加1
if
(digits[i]+flag+index>9){
digits[i]=0;
index=1;
if
(i==0){
carry=1;
}
}
else
{
digits[i]=digits[i]+1;
break
;
}
flag=0;
// printf("%d",digits[i]);
}
//这个值也得写明白,不然程序不知道???
*returnSize=digitsSize+carry;
if
(carry){
int
*newdigits=(
int
*)
malloc
(
sizeof
(
int
)*digitsSize+1);
newdigits[0]=1;
for
(i=1;i<digitsSize+1;i++){
newdigits[i]=0;
}
return
newdigits;
}
else
{
return
digits;
}
}
|
PS:迷迷糊糊就写完了。。。。。不执行。。。。。看了一下网上的程序貌似最后还要返回那个returnSize。。。。。。。。。。。。。。这才可以。
其实只有全是9的时候才会产生首位进位。。。。。。。。。。。
本文转自 努力的C 51CTO博客,原文链接:http://blog.51cto.com/fulin0532/1865214