题目
对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。
给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-to-array-form-of-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例
示例 1:
输入:A = [1,2,0,0], K = 34
输出:[1,2,3,4]
解释:1200 + 34 = 1234
示例 2:
输入:A = [2,7,4], K = 181
输出:[4,5,5]
解释:274 + 181 = 455
示例 3:
输入:A = [2,1,5], K = 806
输出:[1,0,2,1]
解释:215 + 806 = 1021
示例 4:
输入:A = [9,9,9,9,9,9,9,9,9,9], K = 1
输出:[1,0,0,0,0,0,0,0,0,0,0]
解释:9999999999 + 1 = 10000000000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-to-array-form-of-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码(C语言)
#include<stdio.h>
#include<math.h>
#include<malloc.h>
int* addToArrayForm(int* A, int ASize, int K, int *returnSize){
int Size;
int KSize;
printf("%d\n",K);
if(K==0){
KSize=1;
}
else{
KSize=(int)log10(K) +1;
}
printf("%d\n",KSize);
if(ASize>=KSize){
// *returnSize=ASize;
Size=ASize;
}
else{
// *returnSize=KSize;
Size=KSize;
}
printf("%d\n",Size);
int *result=(int*)malloc(sizeof(int)*(Size+1));
int *K_K=(int*)malloc(sizeof(int)*Size);
int *K_A=(int*)malloc(sizeof(int)*Size);
int Y=0;
for(int j=0;j<Size;j++){//K的数组
if(j<Size-KSize){
K_K[j]=0;
printf("%d %d ",K_K[j],j);
}
else{
Y=K/pow(10,Size-j-1);
K_K[j]=Y%10;
printf("%d %d ",K_K[j],j);
}
}
printf("\n");
for(int j=0;j<Size;j++){//A的数组
if(j<Size-ASize){
K_A[j]=0;
printf("%d %d ",K_A[j],j);
}
else{
K_A[j]=A[j-Size+ASize];
printf("%d %d ",K_A[j],j);
}
}
printf("\n");
int K_K_K=0;//存储进位
for(int i=Size;i>0;i--){
result[i]=(K_A[i-1]+K_K[i-1]+K_K_K)%10;
printf("%d %d %d ",i,K_K_K,result[i]);
K_K_K=(K_A[i-1]+K_K[i-1]+K_K_K)/10;
// K_K_K=0;//进位初始化
printf("\n");
}
result[0]=K_K_K;
if(result[0]==0){
int *point=result;
result=point+1;
}
return result;
}
int main()
{
int nums[1] = {0};
int K = 23;
int *returnSize;
int* p = addToArrayForm(nums, 1, K,returnSize);
// int size=sizeof(*p);
for(int i=0;i<2;i++){
printf("%d ",p[i]);
}
return 0;
}
解读
!!!!!
刚学着用博客,然后误删了。。。。
没心情重写了
直接贴代码