1模拟实现strncpy:
详见:我的博客《字符串操作函数模拟实现大全》;
2.模拟实现atoi函数,将数字字符串自动转化为十进制数字输出:
例如给出字符串“12345”,输出12345.《剑指office》习题
程序实现:
#include<stdio.h>
#include<assert.h>
#include<string.h>
int my_atoi(const char* str)
{
int flag=1;
int ret=0;
assert(str);
if(*str=="-")
{
flag=-1;
str++;
}
else if(*str=='+')
{
str++;
}
while(*str)
{
ret=ret*10+*str-'0';//算法很重要
str++;
}
return flag*ret;
}
int main()
{
char* p="12345";
int ret=my_atoi(p);
printf("%d",ret);
return 0;
}
3.求第n个斐波那契数列
剑指offer里有这样一道题,它是关于求解斐波那契(fibonacci)数列的。
对于这个数列呢,它是这样定义的:当n=0时,f(n)=0; 当n=1时,f(n)=1; 当n>1时,f(n)=f(n-1)+f(n-2).
例如数列:1,1,2,3,5,8,13.....它是一直递增下去的,并且从第二个数起后面一个数是前两个数的和。
看到这样一个问题或许大多数人会想到用递归的方式,这样代码很简洁啊!
用递归方法:
#include<stdio.h>
#include<stdlib.h>
int my(int n)
{
if(n<=0)
{
return 0;
}
else if(n==1)
{
return 1;
}
else
return my(n-1)+my(n-2);
}
int main()
{
int n=0;
int ret=0;
scanf("%d",&n);
ret=my(n);
printf("%d",ret);
return 0;
}
非递归方法:(在递归的方法上稍作改变)
#include<stdio.h>
#include<stdlib.h>
int my(int n)
{
int num1=0;
int num2=1;
int num3=0;
if(n<=0)
{
return 0;
}
else if(n==1)
{
return 1;
}
else
{
while(n>=2)
{
n--;
num3=num1+num2;
num1=num2;
num2=num3;
}
return num3;
}
}
int main()
{
int n=0;
int ret=0;
scanf("%d",&n);
ret=my(n);
printf("%d",ret);
return 0;
}
ok!!!come on!!!