给定一个由正整数组成的非空数组,也就是一个正整数N(1≤N<)的各位数字,其中最高位数字存放在数组的首位, 且每个数组元素只存储一位数字。
请求出N-1对应的新数组并输出。
假设除了整数 0 之外,数组的首元素不会是零。
输入格式:
输入在一行中给出正整数N的各位数字,用空格隔开
输出格式:
输出N-1的各位数字,用空格隔开
输入样例:
2 8 6 6
结尾无空行
输出样例:
2 8 6 5
结尾无空行
代码:
#include <stdio.h>
#include <stdlib.h>
int *GetDigits(int *digitsSize);
int* MinusOne(int *digits, int digitsSize, int *returnSize);
int main()
{
int *digits, *returnDigits, digitsSize, returnSize,i;
digits = GetDigits(&digitsSize);
returnDigits=MinusOne(digits, digitsSize, &returnSize);
for (i=0;i<returnSize;i++)
{
printf("%d ", returnDigits[i]);
}
printf("\n");
free(digits);
free(returnDigits);
return 0;
}
int *GetDigits(int *digitsSize)
{
int *res,i;
char s[2001];
if (fgets(s,2001,stdin))
{
}
res=(int *)malloc(1000*sizeof(int));
*digitsSize=0;
for (i=0;s[i];i++)
{
if (s[i]>='0' && s[i]<='9')
{
res[(*digitsSize)++]=s[i]-'0';
}
}
return res;
}
/* 你的代码将被嵌在这里 */
int* MinusOne(int *digits, int digitsSize, int *returnSize)
{
int *returndigits = GetDigits(returnSize);
if(digitsSize == 1 )
{
returndigits[0] = digits[0] - 1 ;
*returnSize = digitsSize;
return returndigits;
}
else
{
for (int i = digitsSize-1 ; i >= 0 ; i-- )
{
if(digits[i] != 0)
{
digits[i] = digits[i] - 1 ;
break;
}
else
digits[i] = 9 ;
}
if (digits[0] == 0 )
{
for( int i=0 , j=1 ; j < digitsSize ; i++,j++)
returndigits[i] = digits[j];
*returnSize = digitsSize -1 ;
}
else
{
for (int i=0 ; i <digitsSize ; i++ )
returndigits [i] = digits[i] ;
*returnSize = digitsSize;
}
return returndigits;
}
}