剑指offer 12 -打印1到最大的n位数
来源:互联网 发布:天空表白墙源码v4.1 编辑:程序博客网 时间:2024/05/22 16:45
注意点:(1)n很大,溢出,采用字符串表示数
(2)如何判断每一次增加1后是不是到了最大的n位数
#include<iostream>using namespace std;// 方法1bool Increment(char *number){int nTakeOver =0;int nLength=strlen(number);for(int i=nLength-1;i>=0;i--){int nSum=number[i]-'0'+nTakeOver;if(i==nLength-1)nSum++;if(nSum>=10){if(i==0)return true;else{nSum-=10;nTakeOver=1;number[i]=nSum+'0';}}else{number[i]=nSum+'0';break;}}return false;} void printNumber(char *number){int isBegining=false;int nLength=strlen(number);for(int i=0;i<nLength;i++){if(number[i]!='0'&& ( ! isBegining) )isBegining=true;if(isBegining)cout<<number[i];}cout<<"";}void printToMaxOfDigits1(int n){if(n<=0)return ;char *number=new char[n+1];memset(number,'0',n);number[n]='\0';while(!Increment(number)){printNumber(number);}delete []number;}//方法2 递归void IncrementRecursively(char *number,int n,int index){if(index==n-1){printNumber(number);return;}for(int i=0;i<10;i++){number[index+1]=i+'0';IncrementRecursively(number,n,index+1);}}void printToMaxOfDigits2(int n){if(n<=0)return ;char *number=new char[n+1];number[n]='\0';for(int i=0;i<10;i++){number[0]=i+'0';IncrementRecursively(number,n,0);}delete []number;}int main(){printToMaxOfDigits1(2);printToMaxOfDigits1(0);printToMaxOfDigits2(2);printToMaxOfDigits2(-1);}2.两个大数相加
#include<iostream>using namespace std;int main(int argc,char* argv[]){int T;cout<<"输入测试组数: ";cin>>T;int len,k,i;while(T--){char a[1000],b[1000],sum[1001];cout<<"输入相加数: ";cin>>a>>b;for(i=0;i<1001;i++)sum[i]='0';len=strlen(a);for(i=len-1,k=0;i>=0;i--,k++){sum[k]=sum[k]+a[i]-'0';int n=k;while(sum[n]>'9'){sum[n+1]=sum[n+1]+(sum[n]-'0')/10;sum[n]=(sum[n]-'0')%10+'0';n++;}}len=strlen(b);for(i=len-1,k=0;i>=0;i--,k++){sum[k]=sum[k]+b[i]-'0';int n=k;while(sum[n]>'9'){sum[n+1]=sum[n+1]+(sum[n]-'0')/10;sum[n]=(sum[n]-'0')%10+'0';n++;}} for(i=1000;sum[i]=='0';i--);cout<<a<<" + "<<b<<" = ";for(;i>=0;i--)cout<<sum[i];cout<<endl;if(T>0)cout<<endl;}return 0;}
0 0
- 剑指offer-12 打印1到最大的N位数
- 剑指offer 12 -打印1到最大的n位数
- 剑指Offer-12-打印1到最大的n位数
- 剑指Offer 12 打印1到最大的n位数
- 剑指offer-12:打印1到最大的n位数
- 剑指Offer之打印1到最大的N位数
- 剑指offer:打印1到最大的n位数
- 【剑指offer】打印1到最大的n位数
- [剑指Offer]打印1到最大的n位数
- 【剑指offer】打印1到最大的n位数
- 剑指Offer之打印1到最大的n位数
- 剑指Offer之 - 打印1到最大的n位数
- 剑指offer:打印1到最大的n位数
- [剑指offer-1515]打印1到最大的N位数
- 剑指offer 打印1到最大的N位数
- 剑指Offer--012-打印1到最大的N位数
- 剑指Offer 打印1到最大的n位数
- 剑指Offer:打印1到最大的N位数
- SGU136 Erasing Edges
- 数据库连接池
- IPC总结
- 并查集之 Find函数
- 使用字符串的处理函数
- 剑指offer 12 -打印1到最大的n位数
- 《C++Primer》读书笔记--命名空间
- java 框架基础知识(2)----动态代理-->Spring AOP
- 【牛腩】界面整合(36-61讲)
- ERROR 2002 (HY000)
- (7)LinuxI2C驱动--I2C总线驱动
- redis集群报错:clusterdown the cluster is down
- 如何选择域名和主机
- NSTimer 计时器的创建