社区
C语言
帖子详情
大数存储
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-->..
大数
存储
及乘法运算
大数
相乘,数值范围超出double,采用数组
存储
数字
大数
存储
以及计算的算法
本文主要论述三方面的内容:一是浅谈
大数
计算的计算类型,思考
大数
简单计算的算法,并且做出可行的程序设计;二是将前面生成的算法应用到椭圆曲线密码体制中;三是展望
大数
计算的发展前景。
大数
的
存储
及四则运算
大数
的
存储
及四则运算算法,C语言实现,包括
大数
除
大数
、
大数
乘
大数
。
随机
大数
相乘C++实现代码
电脑随机产生
大数
,实现
大数
相乘,密码学中用的~~~~~~
大数
运算c++
设计一个“
大数
类”(LargeNumber),使它支持对任意大整数的输入、输出和基本运算(+,-,×,÷,=,++,--,^)。 1. “
大数
”能以字符串的方式
存储
在文件中,并能将其读入内存,实现字符与数值的转化,参与运算。 2. 重载基本运算符,使其能够实现“
大数
”与“
大数
”,“
大数
”与双精度数之间的基本运算。 3. 给
大数
引进“正负号”,使其支持正负数的运算。
C语言
69,373
社区成员
243,079
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章