怎样存一个大数
发布时间:2021-05-28 20:08:12 所属栏目:大数据 来源:网络整理
导读:标题: ? ? 输入数字n,按次序打印出1到最大的n位十进制数。好比输入3,则打印出1,2,3,一向到最大的3位数即999。 ? ?此题看起来简朴,当我刚开始看到题目后,起首想到的就是先求出最大值,然后在一个一个打印出就ok啦。可是细心领略题意,并没有汇报n的取值
标题: ? ? 输入数字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<n;i++) // { // if(flag?&&?num[i]?!=?'0') // { // flag?=?false; // } // if(!flag)//若高位不为0,打印 // { // printf("%c",num[i]); // } // } // cout<<"?"; / |