首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

大整数有关问题,纠结了好久,求解救

2013-09-28 
大整数问题,纠结了好久,求解救啊数据结构与算法实验题 22..11 高精度整数问题实验任务我们知道 int 表示的

大整数问题,纠结了好久,求解救啊
数据结构与算法实验题 22..11 高精度整数问题
实验任务
我们知道 int 表示的数据范围是-2^31 ~ 2^31 - 1,而__int64 表示的数据范围是
-2^63~2^63 - 1。而 21!就将超出__int64 的范围。
现在请你计算 n!-m!的结果。
数据输入
输入数据只有一行,两个数字 n 和 m(0<=m<=n<=100)。
数据输出
输出 n!-m!的结果。
输入示例
输出示例
10 5
3628680





#include <stdio.h>
#define N 1000
int* f(int m);//求n!并返回数组守地址
int g(int m);//返回数组长度大小
void main()

int n,m,c[N],a=0;
scanf("%d%d",&n,&m);
for(int i=g(n)-1;i>=0;i--)
{
int j;
j=g(m)-1;
(*(f(n)+i))=(*(f(n)+i))-a;
if(j>=0)
{
if((*(f(n)+i))<(*(f(m)+j)))
{
c[i]=(*(f(n)+i))+10-(*(f(m)+j));
a=1;
}
else
{
c[i]=(*(f(n)+i))-(*(f(m)+j));
j--;
a=0;
}
}
else
{
c[i]=*(f(n)+i);
a=0;
}
}
for(int k=0;k<g(n);k++)
printf("%d",c[k]);
printf("\n");
}

int* f(int m)
{
int b[N];
int a[N];
int j,k,c,r,cnt=1,x;
a[N-1]=1;
for(k=2;k<=m;k++)

c=0;r=N-1;
for(j=1;j<=cnt;j++)

x=a[r]*k+c;
a[r]=x%10;
c=x/10;
r--;
}
while(c)
{
a[r]=c%10;
c=c/10;
r--;
cnt++;
}
}
int e=0;
for(j=N-cnt;j<N;j++)
{
b[e]=a[j];
e++;
}
return b;
}

int g(int m)
{
int a[N];
int j,k,c,r,cnt=1,x;
a[N-1]=1;
for(k=2;k<=m;k++)

c=0;r=N-1;
for(j=1;j<=cnt;j++)
{
x=a[r]*k+c;
a[r]=x%10;
c=x/10;
r--;
}
while(c)
{
a[r]=c%10;
c=c/10;
r--;
cnt++;
}
}
return cnt;
}


改了好久都错,求解救啊 数据结构 数据 算法
[解决办法]
用无符号的试试。

unsigned long


[解决办法]
定义用字符数组存然后一位一位的取出来做相应的运算

热点排行