递归实现10进制转8进制,字符串数字互转,判断数组正逆向
1.通過遞歸的方式打印八進制,使用遞歸的方式一般會有if,else。
2.將數字轉字符串,字符串轉數字
//#define _CRT_SECURE_NO_WARNINGS??? //取消安全性檢查,如果不加這一句的時候scanf將報錯。
#include <stdio.h>
#include <stdlib.h>
?
/************************************************************************/
/* 獲得數字的長度??????????????????????????????????????????????????????*/
/************************************************************************/
int getNumLength(int num)
{
??? int numLength = 0, inum;
??? for (inum = num; inum; inum /= 10)
??? {
??????? numLength++;
??? }
??? return numLength;
}
?
/************************************************************************/
/* 獲得10位的值????????????????????????????????????????????????????????*/
/************************************************************************/
int get10(int n)
{
??? int res = 1;
??? for (int i = 0; i < n; i++)
??? {
??????? res *= 10;? //不斷相乘
??? }
??? return res;
}
?
/************************************************************************/
/* 將一個字符串變成數字????????????????????????????????????????????????????????????????????*/
/************************************************************************/
int character2Integer(char *str)//-1代表失敗
{
??? char *istr = str;//保留副本
??? int num = 0;
??? while (*str != '\0')
??? {
?
??????? if ((*str)<'0' || (*str)>'9')
??????? {
??????????? return? -1;
??????? }
??????? //printf("%c\n",*str);//取出每一個字符
??????? *str++;
??????? num++;//計數,判斷有多少位
??? }
??? printf("%d", num);
??? int lastres = 0;?? //12345? 1?12? 123 1234 12345
??? for (int i = 0; i < num; i++)
??? {
??????? lastres *= 10;?? //結果乘以10
??????? int wei = istr[i] - 48;//取出字符
??????? lastres += wei;//累加
??????? printf("\nwei=%d", wei);//打印字符轉換為整數的位
??? }
??? return? lastres;
?
}
?
/************************************************************************/
/* 將數字轉換成為字符串????????????????????????????????????????????????*/
/************************************************************************/
void interger2character(int num,char *str)
{
??? int i;
??? int size = getNumLength(num);
??? //printf("%d",size);
??? if (num < 0)
??? {
??????? str[0] = '-';
??????? num *= -1;
??????? for (i = size; num; num /= 10, i--)
??????? {
??????????? str[i] = num % 10 + 48;
??????? }
??? }
??? else {
??????? for (i = size - 1; num; num /= 10, i--)
??????? {
??????????? str[i] = num % 10 + 48;
??????? }
??? }
}
?
int main(int argc, char *argv[])
{
??? char *str = "1234567890";//編號為0的字符
??? char str2[20] = {0};
??? //1、整形轉字符串
??? int num = -123456,i;
??? interger2character(num,str2);
??? //2、打印字符串
??? for (i = 0; i < 20;i++)
??? {
??????? putchar(str2[i]);
??? }
??? putchar(10);
???
??? printf("-------------------------------------\n");
??? num = character2Integer(str);
??? printf("\n得到的數字是:%d\n", num);
?
??? system("pause");
??? return 0;
}
3、判斷數組正逆序,文件案例結構如下:
judgeArrayIfDecreaseByRecursion.h
#ifndef _JUDGEARRAY_
#define _JUDGEARRAY_
?
/************************************************************************/
/* 隨機生成數組????????????????????????????????????????????????????????*/
/************************************************************************/
extern void initArray(int *arr,int n);
?
/************************************************************************/
/* 打印數組內容????????????????????????????????????????????????????????*/
/************************************************************************/
extern void printArray(int *arr,int n);
?
/************************************************************************/
/* 選擇排序,升序??????????????????????????????????????????????????????*/
/************************************************************************/
extern void sortArrayASC(int *arr, int n);
?
/************************************************************************/
/* 選擇排序,降序??????????????????????????????????????????????????????*/
/************************************************************************/
extern void sortArrayDESC(int *arr,int n);
?
/************************************************************************/
/* 通過遞歸的方式查找數組是否是遞減0表示非遞減,1表示遞減?????????????? */
/************************************************************************/
extern int judgeArrayIfDesc(int *arr, int n, int i);
?
#endif
?
judgeArray.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "judgeArrayIfDecreaseByRecursion.h"
?
/************************************************************************/
/* 生成范圍在n之內的數組????????????????????????????????????????????????????????????????????*/
/************************************************************************/
void initArray(int *arr, int n)
{
??? //初始化隨機種子
??? srand((int)time(NULL));
??? for (int i = 0; i < n; i++)
??? {
??????? arr[i] = rand()%n;
??? }
}
?
/************************************************************************/
/* 打印數組內容????????????????????????????????????????????????????????*/
/************************************************************************/
void printArray(int *arr, int n)
{
??? int i = 0;
??? for (i; i < n; i++)
??? {
??????? printf("%d ",arr[i]);
??? }
??? putchar(10);
}
?
/************************************************************************/
/* 選擇排序,升序??????????????????????????????????????????????????????*/
/************************************************************************/
void sortArrayASC(int *arr, int n)
{
??? int i, min, j, tmp;
??? for (i = 0; i < n;i++)
??? {
??????? min = i;?? //a[i]
??????? for (j = i + 1; j < n;j++)
??????? {
??????????? if (arr[min] > arr[j])
??????????? {
??????????????? min = j;
??????????? }
??????? }
??????? tmp = arr[i];
??????? arr[i] = arr[min];
??????? arr[min] = tmp;
??? }
}
?
/************************************************************************/
/* 選擇排序,降序????????????????????????????????????????????????????????????????????*/
/************************************************************************/
void sortArrayDESC(int *arr, int n)
{
??? int i, max, j, tmp;
??? for (i = 0; i < n;i++)
??? {
??????? max = i;
??????? for (j = i + 1; j < n;j++)
??????? {
??????????? if (arr[max] < arr[j])
??????????? {
??????????????? max = j;
??????????? }
??????? }
??????? tmp = arr[i];
??????? arr[i] = arr[max];
??????? arr[max] = tmp;
??? }
}
?
/************************************************************************/
/* 通過遞歸的方式查找數組是否是遞減0表示非遞減,1表示遞減?????????????? */
/************************************************************************/
int judgeArrayIfDesc(int *arr, int n,int i)
{
??? //int i = 0,j;
??? /*for (i = 0; i < n;i++)
??? {
??? for (j = i + 1; j < n;j++)
??? {
??? if (arr[i] < arr[j])
??? {
??? return 0;
??? }
??? }
??? }*/
?
?
??? if (i + 1 < n )
??? {
??????? return (arr[i] < arr[i + 1]) ? 0 : judgeArrayIfDesc(arr, n, i + 1);
??? }
??? return 1;
}
judgeArrayIfDecreaseByRecursion.c
#include <stdio.h>
#include <stdlib.h>
#include "judgeArrayIfDecreaseByRecursion.h"
#define N 20
?
int main(int argc, char *argv[])
{
??? int arr[N];
??? int res;
??? initArray(arr,N);
??? printArray(arr, N);
??? sortArrayDESC(arr,N);
??? //sortArrayASC(arr, N);
??? printArray(arr, N);
?
??? res = judgeArrayIfDesc(arr, N,0);
??? switch (res)
??? {
??? case 0:printf("非遞減\n"); break;
??? case 1:printf("遞減\n");break;
??? }
???
??? system("pause");
??? return 0;
}
?
?
總結
以上是生活随笔為你收集整理的递归实现10进制转8进制,字符串数字互转,判断数组正逆向的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工商银行电子银行承兑汇票怎么接收(电子银
- 下一篇: 二分查找(5种方式实现二分查找),栈