您的位置:首页 > 其它

递归思想实现大数问题(打印1到n位最大整数)

2016-05-24 15:27 507 查看
假设给一个20位的一个整数,大家都知道 int,float ,double 型都表示不了这么大的数,这就涉及到了大数的问题,我们可以用字符串来模拟这个20位的数。动态开辟一个21个char型大小的内存
char *num=(char *)malloc(21*sizeof(char));
我们将前20个内存初始化为‘0’,我们用这20位来模拟这个20位的整数。最后一位放一个‘\0’。
有时候递归可以简化问题,可以把大的问题划分为一个个的小部分逐一解决。在这里就用递归来解决(一开始会有点想不明白,但是一旦懂了就会感觉真的递归会比较容易。。。)
下面就是具体的实现
#include <stdio.h>

void print(const char *num)
{
int i = 0;
while (num[i] == '0')/*此处我们过滤了高位的0,让输出更符合我们习惯*/
{
i++;
}
printf("%s\n", num + i);
}

void inc(char *num, int len, int i)
{
int j = 0;
if (i == len - 1)/*递归到了最低位,开始输出*/
{
print(num);
return;
}
for (j = 0; j < 10; j++)/*次高位再次划分为0-9*/
{
num[i+1] = j + '0';
inc(num, len, i + 1);/*一直递归下去直到最低位*/
}
}

int main()
{
int n = 0;
scanf("%d", &n);
char *num = (char *)malloc(n + 1);
num
= '\0';
int i = 0;
for (i = 0; i < 10; i++)/*把整个问题划分为一个个小问题*/
{
num[0] = i + '0';/*把最高位分为0-9的小部分*/
inc(num, n, 0);
}
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: