博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试题12 打印1到最大的N位数题目
阅读量:2401 次
发布时间:2019-05-10

本文共 2619 字,大约阅读时间需要 8 分钟。

地址:http://ac.jobdu.com/problem.php?pid=1515

题目1515:打印1到最大的N位数

题目描述:

给定一个数字N,打印从1到最大的N位数。

输入:

每个输入文件仅包含一组测试样例。

对于每个测试案例,输入一个数字N(1<=N<=5)。

输出:

对应每个测试案例,依次打印从1到最大的N位数。

样例输入:
1
样例输出:
123456789
解题思路:

用字符串存储大数据。根据输入的n值,动态创建字符数组。字符数组每一位代表一位数,左边为高位,右边为低位。

判断到达n位最大整数的条件:左边第一位产生了进位,则停止打印。

打印条件:从左到右遍历字符数组,碰到第一个非‘0’字符开始打印。

方法一:

#include 
#include
void print(char *buf) { int len = strlen(buf); bool isStart = false; for(int i = 0; i < len; i ++){ if(buf[i] == '0' && !isStart) continue; printf("%c", buf[i]); isStart = true; } printf("\n");}bool add(char *buf){ int len = strlen(buf); int carry = 0; bool isOverflow = false; for(int i = len - 1; i >= 0; i --){ int sum = buf[i] - '0' + carry; if(i == len - 1) sum ++; if(sum >= 10){ if(i == 0){ isOverflow = true; break; } else { sum -= 10; carry = 1; buf[i] = '0' + sum; } } else { buf[i] = '0' + sum; break; } } return isOverflow;}int main() { int n; scanf("%d", &n); char *buf = new char[n + 1]; buf[n] = '\0'; memset(buf, '0', n); while(!add(buf)) print(buf); delete []buf; return 0;}/************************************************************** Problem: 1515 Language: C++ Result: Accepted Time:90 ms Memory:1024 kb****************************************************************/
方法二:

递归,n位数字,从0~9的全排列

#include 
#include
void print(char* buf){ bool isBeginning = false; int len = strlen(buf); for(int i = 0; i < len; i ++){ if(buf[i] == '0' && !isBeginning) continue; else { isBeginning = true; printf("%c", buf[i]); } } if(isBeginning) printf("\n");}void recursive(char *buf, int len, int index){ if(index == len - 1){ print(buf); return; } else { for(int i = 0; i < 10; i ++){ buf[index + 1] = '0' + i; recursive(buf, len, index + 1); } }} int main(){ int n; scanf("%d", &n); char *buf = new char[n + 1]; buf[n] = '\0'; for(int i = 0; i < 10; i ++){ buf[0] = '0' + i; recursive(buf, n, 0); } delete []buf;}/************************************************************** Problem: 1515 Language: C++ Result: Accepted Time:90 ms Memory:1024 kb****************************************************************/
注意:字符的加法。'0' + 3 == '3'

转载地址:http://rhsob.baihongyu.com/

你可能感兴趣的文章
自动化分享里程碑小结20180127
查看>>
对这个公众号的分析和期望
查看>>
疯狂的十天计划开启(二) (改)
查看>>
自动化运维平台的流程草图
查看>>
通过shell脚本检测MySQL服务信息
查看>>
Greenplum集群部署小记
查看>>
通过java画文本格式的统计图
查看>>
MySQL存储过程的权限问题
查看>>
大分区表的手工并行优化
查看>>
运维工作中几点深刻的经验和教训
查看>>
本周搞几件事情,说说你的计划吧
查看>>
在oracle实践学习位运算 第一篇
查看>>
通过sql语句分析足彩
查看>>
生产环境sql语句调优实战第七篇
查看>>
一个oracle查询引起的bug
查看>>
通过shell来比较oracle和java中的字符串使用
查看>>
关于纠结的recycle pool的设置
查看>>
清华梦的粉碎读后感--论理想主义者王垠
查看>>
生活中的优化和向往(r11笔记第72天)
查看>>
最近的几个技术问题总结和答疑(七)
查看>>