高精度加法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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++; }