高精度加法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序设计挑战式课程设计极限挑战挑战,不是为着征服自然,而是为着突破自我,超越自我生命有极限,思想无极限,高度有极限,境界无极限

作业名称:

高精度加法 学 院:

班 级:

学 号:

姓 名:

团队组成: 无

大学

2015年11月23日

请填写以下十项内容,将表格按页对齐(插入空行),勿删除任何部分。

1、问题与背景(描述程序所要解决的问题或应用背景)

2、开发工具(列出所使用的开发工具和第3方开发库)

3、主要功能(详细说明程序的功能)

4、设计内容(详细描述解决问题的原理和方法、算法、数据结构等)

5、程序文件与工程名称(标出程序中所有文件名、工程名称及其说明)

6、函数模块(程序中各个函数的原型声明及其说明)

7、使用说明(运行程序的小型说明书)

8、程序开发总结(简要叙述编写本作业的收获与思考)

9、运行截图(附上程序运行的截图画面,至少有1幅,截图越翔实得分越高)

Windows中抓取当前活动窗口:Alt + Print Screen,抓取全屏:Print Screen。或者使用HyperSnap等软件(百度搜索)。

10、源程序(附上程序源代码,若是多个文件,标出文件名)

源文件:高精度加法\main.cpp

源代码如下:

#include

#include

#include

using namespace std;

void add(const char *num1,const char *num2,char *result);

int main()

{

char s[100]={0},argv1[100]={0},argv2[100]={0};

int a=1;

cout<<"本程序用于两个数的高精度加法计算,允许正负号"<

cout<

while (a)

{

cout<<"请分别输入两个100位以内的数字,以回车结束"<

gets(argv1);

gets(argv2);

cout<

cout<<"下面将输出两数的和"<

add(argv1,argv2,s);

cout<

cout<<"继续请输入1,结束请输入0"<

cin>>a;

cout<

if (a)

{

s[100]={0},argv1[100]={0},argv2[100]={0};

cout<<"请按回车以继续"<

getchar(),getchar();

cout<

}

}

return 0;

}

int ctoi(char c)

{

return (c-'0');

}

void _add(const char *num1,const char *num2,char *result) {

int i,j,k,n1,n2,n;

int sig,sta,car,len1,len2;

char c[100]={0};

sig=(*num1=='-')?-1:1,sta=(sig==-1)?1:0;

len1=strlen(num1),len2=strlen(num2);

if (len1>=len2)

{

j=len2-1;

k=0,car=0;

for (i=len1-1;i>=sta;i--)

{

n1=ctoi(num1[i]);

n2=(j>=sta)?(ctoi(num2[j])):0;

j--;

n=(car==1)?(n1+n2+1):(n1+n2);

if (n>9) n=n%10,car=1;

else car=0;

c[k]=n+'0';

k++;

}

if (car==1) c[k]=1+'0',k++;

}

else

{

j=len1-1;

k=0,car=0;

for (i=len2-1;i>=sta;i--)

{

n2=ctoi(num2[i]);

n1=(j>=sta)?(ctoi(num1[j])):0;

j--;

n=(car==1)?(n1+n2+1):(n1+n2);

if (n>9) n=n%10,car=1;

else car=0;

c[k]=n+'0';

k++;

}

if (car==1) c[k]=1+'0',k++;

}

i=0;

if (sig==-1) result[i]='-',i++;

for (j=k-1;j>=0;j--) result[i]=c[j],i++;

}

void _sub(const char *num1,const char *num2,char *result)

{

int i,j,k,n1,n2,n;

int sig,sta1,sta2,car,len1,len2;

char c[100]={0};

sig=(*num1=='-')?-1:1,sta1=(*num1=='-')?1:0,sta2=(*num2=='-')?1:0;

len1=strlen(num1),len2=strlen(num2);

j=len2-1,k=0,car=0;

for (i=len1-1;i>=sta1;i--)

{

n1=ctoi(num1[i]);

n2=(j>=sta2)?(ctoi(num2[j])):0;

j--;

if (car==1) n1=n1-1,car=0;

if (n1

else n=n1-n2;

c[k]=n+'0';

k++;

}

i=0;

if (sig==-1) result[i]='-',i++;

for (j=k-1;j>=0;j--) result[i]=c[j],i++;

}

相关文档
最新文档