题目:

创新互联公司服务项目包括金川网站建设、金川网站制作、金川网页制作以及金川网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,金川网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到金川省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
输入数字n,按顺序打印出1到最大的n位十进制数。比如输入3,则打印出1,2,3,一直到最大的3位数即999。
此题看起来简单,当我刚开始看到问题后,首先想到的就是先求出最大值,然后在一个一个打印出就ok啦。但是仔细理解题意,并没有告诉n的取值范围。若n的值非常大,可能就超过了int或者long long的范围。也就是说在做此题时,需要考虑大数。
为解决存大数的问题,我们可以利用数组或者字符串存大数。接下来我用字符串来解决大数问题。
首先,需要考虑两个问题:
(1)在字符串上模拟加法
(2)将字符串中的数字打印出来
程序实现:
模拟加法:
bool inc(char* num,int n)//模拟加法
{
int i = 0;
int m = 0;
int take = 0;//进位
for(i=n-1;i>=0;i--)
{
m = num[i]-'0'+ take;
take = 0;//进位置0
if(i == n-1) //从末尾加
{
m++;
}
if(m >= 10)//产生进位
{
if(i == 0)//若最高为溢出,终止
return 0;
else
{
take = 1;
num[i] = m - 10 + '0';//进位后,将本位置0
}
}
else
{
num[i] = m + '0';//不产生溢出时,在本位上加
}
}
return true;
}打印:
//void print(char* num,int n)
//{
// bool flag = true;//标志位
// int i = 0;
// for(i=0;i 测试:
int main()
{
int n = 3;//3位数
char* str = new char[n+1];//字符串的最后一位为‘\0’,多开辟一个空间
memset(str,'0',n);//初始化
str[n] = '\0';
while(inc(str,n))
{
print(str,n);
}
delete[] str;//释放空间
str = NULL;
return 0;
}
网页标题:字符串上模拟加法
URL链接:http://cdysf.com/article/pooieg.html