当前位置:文档之家› 无符号大整数计算器

无符号大整数计算器

C语言及面向对象程序设计实验石家庄铁道大学信息学院A 数学类1.题目要求:高斯消元法求解线性方程组:在线性代数中,学习过用高斯消元法求解线性方程组,用类来实现该方法,并在主函数中进行测试;2.解题思路:通常应用高斯消元法的时候,不会直接写出方程组的等式来消去未知数,反而会使用矩阵来计算,将其转化为行阶梯式矩阵,所以程序的算法即线性代数中的矩阵变换为行阶梯式矩阵步骤,所以用一个二维数组存放系数矩阵,一个一维数组存放解值。

3.类的结构(数据和函数);//gauss.h#pragma once#include <cmath>#include <iostream>#define N 100using namespace std;class gauss{private:double a[N][N],b[N];public:gauss(void);void setvalue(int );~gauss(void);};//gauss.cpp#include "gauss.h"gauss::gauss(void){}void gauss::setvalue(int n){int i,j,k;double a[N][N];cout<<"请输入"<<n<<"方程组(未知数系数及等号右边常数):"<<endl;for (i=1;i<=n;i++)for (j=1;j<=n+1;j++)cin>>a[i][j];double o,b[N];for (i=1;i<=n;i++)for (j=i+1;j<=n;j++)if (fabs(a[j][i])>1e-7){o=a[i][i]/a[j][i];for (k=i;k<=n+1;k++)a[j][k]=a[j][k]*o-a[i][k];}for (i=n;i>0;i--){b[i]=a[i][n+1]/a[i][i];for (j=i-1;j>0;j--)a[j][n+1]=a[j][n+1]-b[i]*a[j][i];}cout<<"解得:"<<endl;for (int i=1;i<=n;i++)cout<<b[i]<<endl;}gauss::~gauss(void){}//main.cpp//高斯消元法求解线性方程组.2014.6.25.魏利华#include <iostream>#include <cmath>#include "gauss.h"using namespace std;void main(){int n;cout<<"请输入未知数个数:"<<endl;cin>>n;gauss m;m.setvalue(n);}4.实现中的关键点;高斯法的编程实现if (fabs(a[j][i])>1e-7){o=a[i][i]/a[j][i];for (k=i;k<=n+1;k++)a[j][k]=a[j][k]*o-a[i][k];}for (i=n;i>0;i--){b[i]=a[i][n+1]/a[i][i];for (j=i-1;j>0;j--)a[j][n+1]=a[j][n+1]-b[i]*a[j][i];}5.自己的收获和心得体会:编写时需细心if (fabs(a[j][i])>1e-7) 这句需要的是绝对值大于0因为要考虑系数为负数的情况,而double型判断大于0是要用一个极小数。

1.题目要求无符号大整数计算器:C++编译器自带的四则运算对于数据的范围是有要求,对于位数很高的数据的四则运算就无能为力,例如,12378456179787565453232321218784545121123132121132178767655657与11231548785127851的和。

请用设计一个类完成无符号大整数的四则运算,加减法是必须实现的,乘除法选做。

提示:用字符串string表示数据2.解题思路:大整数超出了存储范围,所以定义为string型,而运算时需要整数型变量,所以数据需要进行转换存入数组中,进行加法时考虑进位,为其设一个数组。

进行减法要考虑借位。

3.类的结构(数据和函数);//jisuan.h#pragma once#include<iostream>#include<string>using namespace std;class jisuan{private:string str1,str2;public:jisuan(void);jisuan(string ,string );void setvalues(string ,string );void yunsuan(string,string);~jisuan(void);};//jisuan.cpp#include "jisuan.h"jisuan::jisuan(void){}jisuan::jisuan(string s,string t){str1=s;str2=t;}void jisuan::setvalues(string s,string t){str1=s;str2=t;}void jisuan::yunsuan(string ,string){int i,n,m,k=0,j;int a[1000],b[1000],c[1000],d[1000],e[1000];n=str1.length();m=str2.length();char *p,*l;p=&str1[0];l=&str2[0];for ( i=0;i<n;i++){ a[n-i-1]=p[i]-'0'; }for ( i=0;i<m;i++){ b[m-i-1]=l[i]-'0'; }if(m<n){c[0]=0;for(i=m;i<n;i++){b[i]=0;}for(i=1;i<n;i++){if(a[i-1]+b[i-1]+c[i-1]>=10)c[i]=1;else c[i]=0;}if(a[n-1]+c[n-1]+b[n-1]>=10){a[n]=0;b[n]=0;c[n]=1;for(i=0;i<=n;i++){d[i]=((c[i]+a[i]+b[i])%10);}cout<<"两数之和为;";for(i=n;i>=0;i--){cout<<d[i]<<"";}cout<<endl;}else{for(i=0;i<n;i++){d[i]=((c[i]+a[i]+b[i])%10);}cout<<"两数之和为;";for(i=n-1;i>=0;i--){cout<<d[i]<<"";}cout<<endl;}}else{c[0]=0;for(i=n;i<m;i++){a[i]=0;}for(i=1;i<m;i++){if(a[i-1]+b[i-1]+c[i-1]>=10)c[i]=1;else c[i]=0;}if(a[m-1]+c[m-1]+b[m-1]>=10){a[m]=0;b[m]=0;c[m]=1;for(i=0;i<=m;i++){d[i]=((c[i]+a[i]+b[i])%10);}cout<<"两数之和为;";for(i=m;i>=0;i--){cout<<d[i]<<"";}cout<<endl;}else{for(i=0;i<m;i++){d[i]=((c[i]+a[i]+b[i])%10);}cout<<"两数之和为;";for(i=m-1;i>=0;i--){cout<<d[i]<<"";}cout<<endl;}}if(n>=m){for(i=m;i<n;i++){b[i]=0;}for(i=0;i<n;i++){if(a[i]<b[i]){e[i]=(a[i]+10-b[i])%10;a[i+1]=a[i+1]-1;}else if(a[i]>=b[i]){e[i]=a[i]-b[i];}}cout<<"两数之差为:";k=n-1;while(e[k]==0){j=k-1;k--;if(e[n-1]!=0) continue;}for(i=j;i>=0;i--){cout<<e[i]<<"";}if(e[n-1]!=0){for(i=n-1;i>=0;i--){{cout<<e[i]<<"";}}cout<<endl;}}else{for(i=n;i<m;i++){a[i]=0;}for(i=0;i<m;i++){if(a[i]>b[i]){e[i]=(b[i]+10-a[i])%10;b[i+1]=b[i+1]-1;}else if(a[i]<=b[i]){e[i]=b[i]-a[i];}}cout<<"两数之差为:";cout<<"-";k=m-1;while(e[k]==0){j=k-1;k--;if(e[m-1]!=0) continue;}for(i=j;i>=0;i--){cout<<e[i]<<"";}if(e[m-1]!=0){for(i=m-1;i>=0;i--){{cout<<e[i]<<"";}}cout<<endl;}}}jisuan::~jisuan(void){}//main.cpp//无符号大整数计算器.2014.6.24魏利华#include"jisuan.h"#include<iostream>#include<string>using namespace std;void main(){string str1,str2;jisuan s;cout<<"请输入第一个数:"<<endl;cin>>str1;cout<<"请输入第二个数"<<endl;cin>>str2;s.setvalues(str1,str2);s.yunsuan(str1,str2);4.实现中的关键点;{ a[n-i-1]=p[i]-'0'; } //实现string型到整数的转换。

相关主题