谁知道大于20位数的计算器怎么做?
哪位高手知道大于20位数的计算器怎么做?
----------------解决方案--------------------------------------------------------
应该用一个大数组来存储数据,然后进行高精度运算.
高精度算法以前我帖过:http://bbs.bc-cn.net/viewthread.php?tid=103210&extra=&page=10#390076
高精度定义类型的最佳办法是 long s[1000]; 每位存储一个10000进制的数,即这个s变量可以精确存储一个4000位的数!高精度计算其实就是模拟我们的正常计算方法,只是数据的规模太大找不到一个可是使用的正常变量类型,因此用数组模拟.
如果不懂可以继续跟帖问
----------------解决方案--------------------------------------------------------
我看了你的高精度,卧龙孔明.谢谢你的讲解,但是没有看懂啊.
可不可以给个详细点的讲解.
老师没有讲过高精度啊,考试考的一道题,我没有答下来.
希望给个具体算法~~
----------------解决方案--------------------------------------------------------
我也看不懂高精度
----------------解决方案--------------------------------------------------------
加法的C代码(10进制型,若改为10000进制将输入方式,存储类型以及进位方法改一下就行)
/*特别为网友写的,请勿直接抄袭*/
#include "stdio.h"
int main(void) {
char a[1000]={0},b[1000]={0},sum[1001]={0};
int i=0,lena,lenb,f=1000;
scanf("%s%s",a,b);
while(a[i]!=0) { a[i]-='0'; i++; }
lena=i; i=0;
while(b[i]!=0) { b[i]-='0'; i++; }
lenb=i; i=1;
while(lena!=0 || lenb!=0 || i) {
if(lena==0 && lenb==0) i=0;
sum[f]=a[lena]+b[lenb]; f--;
if(lena==0) a[lena]=0; else lena--;
if(lenb==0) b[lenb]=0; else lenb--;
}
for(f=1000;f>-1;f--) {
sum[f-1]+=sum[f]/10;
sum[f]=sum[f]%10;
} f=0;
for(i=0;i<1000;i++) {
if(f==0 && sum[i]!=0) f=1;
if(f) printf("%d",sum[i]);
}
getch(); /*观看结果*/
return 0;
}
其它运算在近日内写出并帖出
----------------解决方案--------------------------------------------------------
看明白了.非常感谢斑竹!
高手啊!
[此贴子已经被作者于2006-12-7 20:40:28编辑过]
----------------解决方案--------------------------------------------------------
/*减法*/
#include "stdio.h"
#include "string.h"
int main(void) {
char a[1000]={0},b[1000]={0},sum[1000]={0};
int i=0,lena,lenb,f=999,t=0;
scanf("%s%s",a,b);
while(a[i]!=0) { a[i]-='0'; i++; }
lena=i; i=0;
while(b[i]!=0) { b[i]-='0'; i++; }
lenb=i; i=1;
if(strcmp(a,b)<0) { printf("%c",'-'); t=1; }
while(lena!=0 || lenb!=0 || i) {
if(lena==0 && lenb==0) i=0;
if(!t && (sum[f]+=a[lena]-b[lenb])<0) { sum[f-1]--; sum[f]+=10; }
if( t && (sum[f]+=b[lenb]-a[lena])<0) { sum[f-1]--; sum[f]+=10; }
f--;
if(lena==0) a[lena]=0; else lena--;
if(lenb==0) b[lenb]=0; else lenb--;
}
for(f=999;f>-1;f--) {
sum[f-1]+=sum[f]/10;
sum[f]=sum[f]%10;
} f=0;
for(i=0;i<999;i++) {
if(f==0 && sum[i]!=0) f=1;
if(f) printf("%d",sum[i]);
}
getch();
return 0;
}
----------------解决方案--------------------------------------------------------