您的位置:首页 > 其它

打印1到最大的n位数

2013-08-31 12:14 211 查看
输入:非负整数n。

输出:如输入3,则输出1~999。

基本的方法涉及到大数,通过用字符串模拟加法运算。

知识点:判断溢出

逆序打印字符串

基本的代码如下

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
size_t inc_num(char* num_str, size_t len) {
int i = 0;
int carrier = 0;
num_str[0] += 1;
do {
if (num_str[i] > 9) {
carrier = 1;
num_str[i] -= 10;
} else {
carrier = 0;
}
if (++i > len) {
break;
}
num_str[i] += carrier;
} while (carrier);
return i;
}
void put_num(const char* num_str, size_t len) {
// ignore high zero
while (len && !num_str[len - 1]) {
--len;
}
while (len) {
putchar(num_str[--len] + '0');
}
putchar('\n');
}
void print_num(size_t len) {
if (len <= 0) {
return;
}
char* num_str = (char*)malloc(len);
if (!num_str) {
return;
}
memset(num_str, 0, len);
size_t curr_len = 0;
while ((curr_len = inc_num(num_str, len)) <= len) {
put_num(num_str, len);
}
free(num_str);
}
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("usage ./instance num\n");
return -1;
}
int num = atoi(argv[1]);
print_num(num);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: