Leetcode989
給出自己的AC代碼。
自己的解法,很原始,很繁瑣,需要精煉,抽出共性的代碼段。
而且變量維護做得也很差,程序的出口也比較亂。
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* addToArrayForm(int* A, int ASize, int K, int* returnSize){
int* Karray = (int *)malloc(6*sizeof(int));
for(int i=0;i<6;i++)Karray[i] = 0;
int cnt=0;
while(K!=0){
Karray[cnt] = K%10;
K/=10;
cnt++;
}
if(ASize>=6){
int carry = 0;
int* ans = (int *)malloc((ASize+1)*sizeof(int));
for(int i=0;i<ASize+1;i++){
ans[i] = 0;
}
for(int i=ASize-1, j=0;i>=0;i--,j++){
if(j<6){
ans[i+1] = A[i]+Karray[j]+carry;
if(ans[i+1]>=10){
ans[i+1] %= 10;
carry = 1;
}else{
carry = 0;
}
}else{
ans[i+1] = A[i] + carry;
if(ans[i+1]>=10){
ans[i+1] %= 10;
carry = 1;
}else{
carry = 0;
}
}
}
if(carry == 1){
ans[0] = 1;
}
if(ans[0]==0){
int* retAns = (int *)malloc(ASize*sizeof(int));
for(int i=0;i<ASize;i++){
retAns[i] = ans[i+1];
}
free(ans);
*returnSize = ASize;
return retAns;
}else{
*returnSize = ASize+1;
return ans;
}
}else{
int* ans = (int *)malloc(6*sizeof(int));
for(int i=0;i<6;i++){
ans[i] = 0;
}
int carry = 0;
for(int i=0;i<6;i++){
if(i<ASize){
ans[5-i] = A[ASize-1-i]+Karray[i]+carry;
if(ans[5-i]>=10){
ans[5-i]%=10;
carry = 1;
}else{
carry = 0;
}
}else{
ans[5-i] = Karray[i]+carry;
if(ans[5-i]>=10){
ans[5-i]%=10;
carry = 1;
}else{
carry = 0;
}
}
}
for(int i=0;i<6;i++){
if(ans[i]==0)continue;
*returnSize = 6-i;
int* retAns = (int *)malloc((6-i)*sizeof(int));
for(int j=0;i<6;j++){
retAns[j] = ans[i];i++;
}
free(ans);
return retAns;
}
}
free(Karray);
int* p = (int*)malloc(sizeof(int));
*p = 0;
*returnSize = 1;
return p;
}