一、算法构造
1、递归算法
由题意可知,定义一个有两个参数的递归函数Conversion(n,b)。其中,n表示进行转换的数字,b表示进制。函数的返回值为void。容易得到下面的递归公式:
Conversion(n,b) = { Conversion(0,b) n=0
| Conversion(n/b,b) n>0
2、非递归算法
具体算法实现如图所示。
二、调试、测试及运行
1、调试
(1)进入Conversion()函数,调用递归结束开始返回的各数据的值。
(2)Conversion()函数调用结束各数据的值以及输出结果。
2、运行
三、具体代码实现
/**
* 使用Visual Studio 2013进行编写程序
*/
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <windows.h>
void Conversion(int num, int bin)
{
if (num == 0)
{
return;
}
else
{
Conversion(num / bin, bin);
printf("%d", num%bin);
}
}
int Conversion_un(int num, int bin)
{
int p = 1, y = 0;
int remainder = 0;
while (1)
{
remainder = num % bin;
num /= bin;
y += remainder*p;
p *= 10;
if (num < bin)
{
y += num*p;
break;
}
}
return y;
}
int main()
{
int n = 0;
int b = 0;
int ch = 0;
int k = 0;
printf("Input the number:");
scanf("%d", &n);
while (1)
{
if (n < 0)
{
printf("Input error,try again!\n");
scanf("%d", &n);
}
else
{
break;
}
}
printf("Input the binary(2~16):");
scanf("%d", &b);
while (1)
{
if (b<2 || b>16)
{
printf("Input error,try again!\n");
scanf("%d", &b);
}
else
{
break;
}
}
printf("Input your choose(1.recursion,2.non-recursive):");
scanf("%d", &ch);
while (1)
{
if (ch != 1 && ch != 2)
{
printf("Input error,try again!\n");
scanf("%d", &ch);
}
else if (ch == 1)
{
printf("After Conversion:");
Conversion(n, b);
printf("\n");
break;
}
else
{
k = Conversion_un(n, b);
printf("%d\n", k);
break;
}
}
system("pause");
return 0;
}