㈠ 谁帮我解释下以下代码,c语言用递归函数,实现将一个十进制整数转换成二进制整数输出
#include<stdio.h>
void f(int n)/*可以自选一个值,画图解决问题*/
{
if(n) f(n/2);/*如果n大于0即为真,那么就n除2,再次调用函数*/
else return;/否则跳出/
printf("%d",n%2);/*输出1,0*/
}
int main()
{
int n;
while(1)
{
scanf("%d",&n);
if(n<0) break;
if(n==0) printf("0");
/*有错,你这新开了个条件,应该是if else,下条语句它是必然会执行的,逻辑错了*/
f(n);
printf("\n");
}
return 0;
}
㈡ C语言如何使用递归法将整数n转换成字符串
C语言可以每次取出整数n的个位数,将其转换为一个字符,然后使用递归法将前面除个位以外的整数n转换成字符并加在其后面,全部完成后,再将得到的字符串逆置就行了。
㈢ C语言 递归算法 整数划分问题
#include<stdio.h>
intstack[100];
inttop;
inttotal,n;
voiddfs(intindex)
{
inti;
if(total==n)
{
printf("%d=",n);
for(i=top-1;i>0;i--)
printf("%d+",stack[i]);
printf("%d ",stack[0]);
}
if(total>n)
return;
for(i=n-1;i>=index;i--)
{
total+=i;
stack[top++]=i;
dfs(i);
total-=i;
stack[--top];
}
}
voidmain()
{
while(scanf("%d",&n)!=EOF)
{
top=0;
total=0;
dfs(1);
}
}
㈣ 如何用c语言递归函数对一个整数逆序
#include
<stdio.h>
void
main()
{
void
proc(int
n);
int
n;
scanf("Input
n:%d",n);
proc(n);
void
proc(int
n)
//递归函数
{
if(n\10==0)
//n剩一位数字
{
printf("%d",n);
return();
}
printf("%d",n%10);
//打印最后一位数字
proc(n\10);
//递归,去掉n的最后一位然后调用自己
}
}
㈤ 用c++ 编程:写一段递归函数,将读入的整数按位分开以相反的顺序输出
#include <iostream>
using namespace std;
void getNumber(int a)
{
if(a!=0)
{
cout<<(a%10);
getNumber(a/10);
}
}
int main(void)
{
int num;
cin>>num;
getNumber(num);
return 0;
}
你看这个是不是你需要的?
㈥ C语言程序:用递归法将一个整数n转化成字符串
//举例说明该函数流程,假如输入123,123/10后得12,余数是3
//再次运行convert函数,12/10得1,余数是2
//再次运行convert函数,1/10得0,余数是1
//至此,递归结束,开始打印数字,首先打印最后一次递归的结果1
//然后打印倒数第二次的结果2
//最后打印3,输出123
void convert(int n)
{
int i; //定义整数变量
if ((i=n/10)!=0)//如果整数i除以10后不为0,说明高位还有值,需要更多字符来表示
convert(i);//调用自身,使用除以10后的i值
putchar(n%10+'0');//打印余数,余数是1则打印字符1,以此类推
}
main()
{
int number;//定义整数变量
printf("\nInput an integer:");//输出信息
scanf("%d",&number);//让用户输入一个整数
printf("Output:");//输出信息
if (number<0)//如果是负数
{
putchar('-');//打印负号
number=-number;//负数变为正数
}
convert(number); //执行递归函数
}
㈦ c语言: 编写递归函数把输入的一个负整数转换成二进制输出
根据评论要求,改进代码:
1、函数getBCode是题目要的递归函数,实现转二进制(最高位是符号位)。
思路是十进制数绝对值除以2求余,得到反向二进制原码,反向创建链表保存结果,最终得到的单向链表就是完整二进制数原码,之后根据正负性,负数取反+1。链表头添加符号位。
2、函数freeBny为释放链表,如要重复调用函数getBCode,每次调用需调用一次freeBny。
3、函数showBny是打印输出,为对齐显示,按4的倍数位打印,高位补齐的位数值均与符号位一致。
#include <stdio.h>
#include <malloc.h>
#include <math.h>
typedef struct binary//成员用char类型保存数值,不是'1'或'0'的ASCII码
{
char b;//一位二进制数0或1
struct binary *next;
}BNY;
BNY *getBCode(int n);//获得二进制数(最高位是符号位)
void showBny(BNY *bnyHead);//对齐打印二进制数(保证是4的倍数)
void freeBny(BNY *bnyHead);//释放二进制数链表空间
int main()
{
int n;
BNY bny,*bnyHead=&bny;
while(1)
{
printf("请输入一个整数:"),scanf("%d",&n);
bnyHead->next=getBCode(n);
printf("转为二进制数:"),showBny(bnyHead);
freeBny(bnyHead);
printf(" ");
}
return 0;
}
void freeBny(BNY *bnyHead)
{
BNY *prev=NULL,*bny=NULL;
bny=bnyHead->next;
while(bny)
{
if(prev) prev->next=NULL,free(prev),prev=NULL;
prev=bny;
bny=bny->next;
}
bnyHead->next=NULL;
}
void showBny(BNY *bnyHead)
{
int i,f=-1,len=0,n=0;
BNY *bnySave=bnyHead;
while(bnyHead->next)
{
if(f==-1) f=bnyHead->next->b;
len++;
bnyHead=bnyHead->next;
}
if(len%4)
n=4-len%4;
for(i=0;i<n;i++)printf("%d",f);
bnyHead=bnySave;
while(bnyHead->next)
{
printf("%d",bnyHead->next->b);
n++;
if(n==4)printf(" "),n=0;
bnyHead=bnyHead->next;
}
}
BNY *getBCode(int n)
{
int s,y;
static BNY*bnyPrev=NULL;
static int cy=0,f=-1;//加1进位用
if(f==-1 && n>=0)f=1;
if(f==-1 && n<0)f=0,cy=1;
n=abs(n);
BNY *bnyNew=NULL;
s=n/2,y=n%2;
bnyNew=(BNY *)malloc(sizeof(BNY));
if(!bnyNew) return NULL;
bnyNew->b=y;
// 如是负数,直接取反+1
if(!f) bnyNew->b=!(bnyNew->b);//从最低位开始,负数取反
if(cy)bnyNew->b=bnyNew->b+cy,cy=0;//负数+1
if(bnyNew->b>1)bnyNew->b=0,cy=1;
bnyNew->next=NULL;
if(bnyPrev) bnyNew->next=bnyPrev;
bnyPrev=bnyNew;
n=s;
if(n==0)
{
bnyNew=(BNY *)malloc(sizeof(BNY));//添加符号位
if(!bnyNew) return NULL;
if(!f)
bnyNew->b=1;
else
bnyNew->b=0;
bnyNew->next=bnyPrev;
bnyPrev=NULL;
cy=0,f=-1;
return bnyNew;
}
return getBCode(n);
}
㈧ C语言 递归实现顺序输出整数 要求实现一个函数,对一个整数进行按位顺序输出
比如要执行printdigits(1234),则执行
printdigits(1234/10);
printf("%d\n",1234%10);
要先执行printdigits(1234/10),即printdigits(123),变成执行
printdigits(123/10);
printf("%d\n",123%10);
printf("%d\n",1234%10);
要先执行printdigits(123/10),即printdigits(12),变成执行
printdigits(12/10);
printf("%d\n",12%10);
printf("%d\n",123%10);
printf("%d\n",1234%10);
要先执行printdigits(12/10),即printdigits(1),变成执行
printf("%d\n",1);
printf("%d\n",12%10);
printf("%d\n",123%10);
printf("%d\n",1234%10);
以上依次执行打印:1 2 3 4
㈨ 关于C语言用递归拆分整数
题目中要求如何对整数拆分呢?
这个是有递推公式的:
(1)比较容易理解,把m个数划分为 0<=k<=m个数的和,就是
1. 分k = m次,此时只有一种方法
2.分k <m次,此时的结果是 Chai(m, n-1);
(2)我借鉴了下面博客中的说法。
对于m >n的问题,可以看做把m个苹果放到n个盘子上,有多少种分发。然后把这个问题分为两个部分:
1.分完之后,个数最少的盘子中的苹果数为0.
2.分完之后,个数最少的盘子中的苹果数不为0.
然后
1.就对应着,让其中的一个盘子为空,其他的就转化为把m个苹果放在n-1个盘子问题,也就是Chai(m, n-1)
2.也就是对这个,先在n个盘子上都放一个(保证他们都不为空),然后其他的就转化为,在n个盘子上,放m-n个苹果的问题:Chai(m-n, n);
http://blog.csdn.net/clearriver/article/details/4604247
㈩ c语言递归分割整数正序输出去除最后输出的那个数字后的空格
最偷懒的办法:
#include<stdio.h>
intfg(intn);
intmain()
{
intnum;
scanf("%d",&num);
fg(num);
printf("%c",'');//''是backspace,退格,把空格删掉了。
return0;
}
intfg(intn)
{
if(n>=10)
fg(n/10);
printf("%d",n%10);
return0;
}