N!的递归实现
#include<stdio.h>
#include<string.h>
const int maxn=1e5+10;;
long long step[maxn];
long long solve(int x)
{
if(step[x])
return step[x];
else
return step[x]=x*solve(x-1);
}
int main()
{
memset(step,0,sizeof(step));
step[0]=step[1]=1;
int x;
printf("你想要那个数的阶乘?\n");// 不得大于26;
scanf("%d",&x);
solve(x);
printf("%lld\n",step[x]);
return 0;
}
n!的非递归实现
#include<stdio.h>
const int maxn=30;
long long step[maxn]={1,1};
int main()
{
int x;
printf("说你想知道第几项的阶乘,先说好不得大于26,要不然老子崩溃给你看\n");
scanf("%d",&x);
if(x>26)
printf("瞅瞅你那损色\n");
else
{
for(int i=2;i<=x;i++)
step[i]=i*step[i-1];
printf("%lld\n",step[x]);
}
return 0;
}
斐波那契数列的递归实现
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<string.h>
const int maxn=1e5+10;
long long Fib[maxn];
long long Fibonacci(int x)
{
if(Fib[x]!=0)
return Fib[x];
else
return Fib[x]=Fibonacci(x-1)+Fibonacci(x-2);
}
int main()
{
memset(Fib,0,sizeof(Fib));
Fib[0]=1;Fib[1]=1;Fib[2]=1;Fib[3]=2;
int x;
printf("请输入你想要得知的第n项斐波那契数:(提示该数不得超过50)\n");
scanf("%d",&x);
printf("%d\n",Fibonacci(x));
return 0;
}
非递归实现
#include<stdio.h>
#include<string.h>
long long Fib[50];
int main()
{
memset(Fib,0,sizeof(Fib));
Fib[0]=1,Fib[1]=1,Fib[2]=1,Fib[3]=2;
int x;
printf("请输入一个不大于50的数,来获得这一项的斐波那契数:\n");
scanf("%d",&x);
for(int i=4;i<=x;i++)
Fib[i]=Fib[i-1]+Fib[i-2];
printf("%lld\n",Fib[x]);
return 0;
}
动态数组的实现
#include <stdio.h>
#include <malloc.h>
int main()
{
int *array = 0, num, i;
printf("please input the number of element: ");
scanf("%d", &num);
// 申请动态数组使用的内存块
array = (int *)malloc(sizeof(int)*num);
if (array == 0) // 内存申请失败,提示退出
{
printf("out of memory,press any key to quit...\n");
exit(0); // 终止程序运行,返回操作系统
}
// 提示输入num个数据
printf("please input %d elements: ", num);
for (i = 0; i < num; i++)
scanf("%d", &array[i]);
// 输出刚输入的num个数据
printf("%d elements are: \n", num);
for (i = 0; i < num; i++)
printf("%d,", array[i]);
printf("\b \n"); // 删除最后一个数字后的分隔符逗号
free(array); // 释放由malloc函数申请的内存块
return 0;
}
进制转换
#include<bits/stdc++.h>
using namespace std;
typedef struct Snode
{
int data;
struct Snode *next;
struct Snode *front;
}Snode, *lnode;
void push(lnode &s, int x)
{
lnode p= (Snode *)malloc(sizeof(Snode));
p->data = x;
p->next = s->next;
p->front = s;
s = p;
}
void ini(lnode &s)
{
s = new Snode;
s->next = NULL;
s->front = NULL;
}
int get(lnode s)
{
if (s == NULL)
return -1;
return s->data;
}
void pop(lnode &s)
{
lnode p = new Snode;
p = s;
s = s->front;
delete p;
}
char change(int x)
{
return x+55;//根据ascii码值A是65,所以10+55就可以表示A,以后的依次类推;
}
int main()
{
lnode s;
ini(s);
printf("请输入你想要转换的数字:");
int x,tag=0;
scanf("%d", &x);
if (x < 0)
tag = 1;
x = abs(x);
int cnt = 0;
while (x)
{
push(s, x%2);
x = x / 2;
cnt++;
}
int count = 0;
while (count < cnt)
{
count++;
int e = get(s);
pop(s);
if (tag == 0)
{
if (e < 10)
printf("%d", e);
else
printf("%c", change(e));
}
/*else
{
count=0;
fanma(s);//先转换为反码;
buma(s);
while(count<cnt)
{
count++;
int e=get(s);
pop(s);
}
}*/
}
printf("\n");
system("pause");
return 0;
}
四则运算
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int a, b;
char op;
scanf("%d%c%d", &a, &op, &b);
switch (op)
{
case '-':printf("%d\n", a - b); break;
case '+':printf("%d\n", a + b); break;
case '%':printf("%d\n", a%b); break;
case '/':printf("%.2lf\n", a*1.0 / b); break;
case '*':printf("%d\n", a*b); break;
}
system("pause");
return 0;
}
链表实现进制转换
代码:
#include <stdio.h>
#include <malloc.h>
#include <iostream>
using namespace std;
typedef int SElemType;
typedef int Status;
#define INIT_SIZE 100
#define STACKINCREMENT 10
#define Ok 1
#define Error 0
#define True 1
#define False 0
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
} SqStack;
//初始化栈
Status InitStack(SqStack *s)
{
s->base = (SElemType *)malloc(INIT_SIZE * sizeof(SElemType));
if(!s->base)
{
puts("存储空间分配失败!");
return Error;
}
s->top = s->base;
s->stacksize = INIT_SIZE;
return Ok;
}
//清空栈
Status ClearStack(SqStack *s)
{
s->top = s->base;
return Ok;
}
//栈是否为空
Status StackEmpty(SqStack *s)
{
if(s->top == s->base)
return True;
else
return False;
}
//销毁栈
Status Destroy(SqStack *s)
{
free(s->base);
s->base = NULL;
s->top = NULL;
s->stacksize=0;
return Ok;
}
//获得栈顶元素
Status GetTop(SqStack *s, SElemType &e)
{
if(s->top == s->base)
return Error;
e = *(s->top - 1);
return Ok;
}
//压栈
Status Push(SqStack *s, SElemType e)
{
if(s->top - s->base >= s->stacksize)//栈满
{
s->base = (SElemType *)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(SElemType));
if(!s->base)
{
puts("存储空间分配失败!");
return Error;
}
s->top = s->base + s->stacksize;//修改栈顶位置
s->stacksize += STACKINCREMENT;//修改栈长度
}
*s->top++ = e;
return Ok;
}
//弹栈
Status Pop(SqStack *s, SElemType *e)
{
if(s->top == s->base)
return Error;
--s->top;
*e = *(s->top);
return Ok;
}
//遍历栈
Status StackTraverse(SqStack *s,Status(*visit)(SElemType))
{
SElemType *b = s->base;//此处不能直接用base或top移动,即不能改变原栈的结构
SElemType *t = s->top -1;
while(t >= b)
visit(*t--);
// visit(*b++);
printf("\n");
return Ok;
}
Status visit(SElemType c)
{
printf("%d",c);
return Ok;
}
int main()
{
SqStack a;
SqStack *s = &a;
SElemType e,n;
InitStack(s);
printf("请输入十进制数:");
cin>>n;
printf("\n%d的二进制数是:\n",n);
InitStack(s);
while(n)
{
e = n%2;
Push(s,e);
n/=2;
}
StackTraverse(s,visit);
puts("");
Destroy(s);
return 0;
}