1.给定一个数组,将数组的元素向右移动k个位置, 其中k 是非负整数
#include<windows.h>
#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
int k;
printf("please input the value of k : \n");
scanf("%d", &k); //输入k
int ar[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int ar2[10] = { 0 };
int i = 0;
for (i = 0; i < 10; i++)
{
ar2[i] = ar[i];
} // 令ar2等于ar
for (i = 0; i < 10 - k; i++) //0–10-k
{
ar[i] = ar[i + k];
}
for (i = 0; i < k; i++) //后面剩下几个
{
ar[10 - k + i] = ar2[i];
}
for (int i = 0; i < 10; i++) //打印
{
printf(" %d ", ar[i]);
}
system("pause");
return 0;
}
2、对于非负整数X而言,X的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果X = 1231 ,那么其数组形式为[1,2,3, 1]。给定非负整数X的数组形式A,返回整数X+K的数组形式。
int *addToArrayFrom(int *A, int Asize, int k, int* returnSize)
{
int size = Asize > 5 ? Asize + 1 : 5 + 1;
int *ret = calloc(size, sizeof(int));
//表示加完之后数据总位数
int total = 0;//记录结果总共多少位
//用数组中的每一位加k
int retIdx = size - 1;//数组末尾
while (Asize > 0)
{
k += A[Asize - 1];
ret[retIdx--] = k % 10;
k /= 10;
total++;
Asize--;
}
//如果K比A数组中数据长,k中还有剩余
while (k > 0)
{
ret[retIdx--] = k % 10;
k / 10;
total++;
}
if (total < size)
{
memmove(ret, ret + (size - total), total*sizeof(int));
}
*returnSize = total;
return ret;
}