本文共 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注意:字符的加法。'0' + 3 == '3'#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****************************************************************/
转载地址:http://rhsob.baihongyu.com/