大数存储

co_diy 2006-01-06 07:52:30
字符串用指针,大数也是?
举例说明..
...全文
496 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
manplus 2006-03-05
  • 打赏
  • 举报
回复
mark
f_acme 2006-01-07
  • 打赏
  • 举报
回复
用链表或者(整型或者字符)数组都可以
Mr_Yang 2006-01-06
  • 打赏
  • 举报
回复
我也发个求N!的。

#include <iostream>
#include <cmath>
#include <cstdlib>

using namespace std;
/*
计算n!有多少位
也就是求n! < 10^sum 最小的sum就是位数
两边取对数 log10 1 + log10 2 + .... + log10 n < sum
*/
int GetLength(int n)
{
double sum = 1.0;
for (int i = 1; i <= n; i++)
{
sum += log10((double)i);
}
return (int)sum;
}

/*
计算n!的值
result是要把申请到空间的数组传进来
*/
void Calculate(char* result, int n)
{
int carry = 0; //进位
int begin = 0; //计算的结果末尾有几个0
double bitCount = 1.0; //算到多少位了
int temp;
for (int j = 2; j <= n; j++)
{
bitCount += log10((double)j);

if (result[begin] == 0) //result数组后面有几个0
{
begin++;
}

for (int k = begin; k <= (int) bitCount; k++)
{
temp = (j * result[k] + carry) / 10; //进位是多少
result[k] = (char)((j * result[k] + carry) % 10); //余数
carry = temp; //
}
}
}
int main()
{
int n;
int length; //n!的长度
cout << "请输入一个正整数的来求它的阶乘: ";
cin >> n;

length = GetLength(n);
char* arr = new char[length]; //动态分配数组
if (!arr)
{
cout << "分配内存出错";
exit(1);
}

//初始化数组
arr[0] = 1;
for (int i = 1; i < length; i++)
{
arr[i] = 0;
}

//计算结果
Calculate(arr, n);

int bit = 1;
for (i = length - 1; i >= 0; i--)
{
cout <<(int) arr[i] << " ";

if (bit % 10 == 0) //每10个输出一行
{
cout << endl;
}
bit++;
}
cout<< endl;
system("pause");
return 0;
}
fiftymetre 2006-01-06
  • 打赏
  • 举报
回复
/****************************************************************/
/*
* 程序名称:array
* 程序目的:一位数组的应用。存储大数,本程序用来存储50位数的求N!程序。
* Author :马嘉楠
* Date :2005-12-22
*/

#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
int data[51]; /* 存储50位数,为了方便记忆,不适用data[0] */
int index = 1; /* 表示数组中的位数 */
int n; /* 准备计算的数值 */
/* 初始化数组 */
for(int i =0; i<51; ++i)
data[i] = 0;
data[1] = 1; /* 初始,1!=1 */
cout << " Enter a number to be calculated: " << endl;
cin >> n;
for(int i=1; i<=n; ++i)
{
/* 计算阶乘 */
for(int j=1; j<i; ++j)
data[j] = data[j] * i;
for(int k=1; k<=index; ++k)
{
/* 数组中每一位存储0~9的数字,大于等于10,进位 */
if( data[k] > 10 )
{
for(int m=1; m<=index; ++m)
{
/* 如果计算之后数组中最高位大于等于,位数index+1 */
if( data[index] >10)
index++;
/* 当前位进位 */
data[m+1] += data[m]/10;
/* 进位之后的值 */
data[m] = data[m]%10;
}
}
}
cout << i << "! = ";
for(int j=index; j>0; --j)
cout << data[j];
cout << endl;
}
return 0;
}
bm1408 2006-01-06
  • 打赏
  • 举报
回复
采用链表存储
struct data
{
int num;
struct data *next;
}
比如:
32423423532535234

5234-->3253-->..

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧