用线性表设计一个100位以内的长整数加减运算的程序 求程序

用线性表设计一个100位以内的长整数加减运算的程序 求程序,第1张

程序如下:

#include<iostream>

#include<iomanip>

using namespace std

class very_big_number

{

public:

int section_of_number

very_big_number(int number) //每9位为1段

{

section_of_number = number

}

int *p_section_list = new int[section_of_number]

void input()

{

cout <<"输入数字,每次输入9位   "

for (int i = section_of_numberi >0i--)cin >>p_section_list[i]

}

void output()

{

cout <<"the number is    " <<p_section_list[section_of_number]

for (int i = section_of_number - 1i >悉吵0i--)cout <<setw(9) <<setfill('0') <<p_section_list[i]

cout <<endl

}

}

int main()

{

int section_of_number1

cout <<"enter section_of_number1      "

cin >冲陆耐>section_of_number1

very_big_number number1(section_of_number1)

number1.input()

number1.output()

int section_of_number2

cout <<"enter section_of_number2     "

cin >>section_of_number2

very_big_number number2(section_of_number2)

number2.input()

number2.output()

int sum_section

if (section_of_number1 <section_of_number2)sum_section = section_of_number2 + 1

else sum_section = section_of_number1 + 1 //计算2个数的和

very_big_number sum_of_them(sum_section)

for (int i = 1i <sum_section + 1i++)

{

sum_of_them.p_section_list[i] = 0

}

int max = 999999999

int if_into = 0

int j = 1

for (j <section_of_number1 + 1 &散春&j <section_of_number2 + 1j++)

{

int temp = number1.p_section_list[j] + number2.p_section_list[j] + if_into

if (temp >max)

{

if_into = 1

sum_of_them.p_section_list[j] = temp - max - 1

}

else

{

if_into = 0

sum_of_them.p_section_list[j] = temp

}

}

int *p = number1.p_section_list

if (j <section_of_number1 + 1)    p = number1.p_section_list

else if (j <section_of_number2 + 1) p = number2.p_section_list

for (j<sum_sectionj++)

{

int temp = p[j] + if_into

if (temp >max)

{

if_into = 1

sum_of_them.p_section_list[j] = temp - max - 1

}

else

{

if_into = 0

sum_of_them.p_section_list[j] = temp

}

}

if (if_into)sum_of_them.p_section_list[j] = 1

cout <<endl <<"the sum of the is    "

sum_of_them.output()

cout <<"end"

system("pause>nul")

return 0

}

扩展资料:

线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。

线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储,但是把最后一个数据元素的尾指针指向了首位结点)。

在稍复杂的线性表中,一个数据元素可由多个数据项(item)组成,此种情况下常把数据元素称为记录(record),含有大量记录的线性表又称文件(file)。

线性表中的个数n定义为线性表的长度,n=0时称为空表。在非空表中每个数据元素都有一个确定的位置,如用ai表示数据元素,则i称为数据元素ai在线性表中的位序。

先说如何调用的,用高斯消元法做的

#include<iostream.h>

#include"01.h"

void main()

{

equation a

a.InputData()

a.solve_eqution()

cin.get()

cin.get()

}

下面是以前写的类,可能要你自己修改一下

#include<iomanip.h>

const int Max_Number=20

class equation

{

private:

int number //方程个数

char value[Max_Number] //未知量

double modulus[Max_Number][Max_Number] //方程系数

double constant[Max_Number]//右端常数

public:

equation(int _number=0) //构造函数

void InputData() //输入数据

void solve_eqution() //高斯全主元消去

void gauss_all_valueiaoqu()//Gauss全主元消去法

void gauss_calculate() //高斯消去法以后计算未知量的结果

void evaluechange_hang(int m,int n)

void evaluechange_a_lie(int m,int n)

void evaluechange_value(int m,int n)

}

equation::equation(int _number)

{

number=_number

}

//----------------------------初始化数据为0

void equation::InputData()

{

int i,j

if(number==0)

{

cout<<"输入方程的个数:"

cin>>number

}

//--------------初始化变量符号为默认的a,b,c..

for(i=0i<numberi++)

value[i]='a'+i

//---------输入数据------01.提示如何输汪神入

cout<<"====================================================\n"

cout<<"请在每个方程里输入"<<number<<"系数和一个常数:\n"

cout<<"例:\n方程:a"

for(i=1i<numberi++)

{

cout<<"+"<<i+1<<value[i]

}

cout<<"=10\n"

cout<<"应输入:"

for(i=0i<numberi++)

cout<<i+1<<" "

cout<<"10\n"

cout<<"==============================\n"

//---------02.输入每个方程

for(i=0i<轮陵肢numberi++)

{

cout<<"输入方程"<<i+1<<":"

for(j=0j<numberj++)

cin>>modulus[i][j]

cin>>constant[i]

}

}

//高斯全主元排列求解方程

void equation::solve_eqution()

{

int i,j

gauss_all_valueiaoqu()

if(modulus[number-1][number-1]!=0)

{

gauss_calculate()

for(i=0i<numberi++) //输出结果

{

for(j=0value[j]!='a'+i&&j<numberj++)

cout<<value[j]<<"="<<constant[j]<<endl

}

}

else

cout<<"系数行列式等于腊世零,方程没有唯一的解.\n"

}

void equation::gauss_all_valueiaoqu() //Gauss全主元消去法

{

int i,j,k,mavaluei,mavaluejdouble lik

cout<<"用Gauss全主元消去法结果如下:\n"

for(k=0k<number-1k++)

{

for(mavaluei=mavaluej=i=ki<numberi++)

{

for(j=kj<numberj++)

if(modulus[i][j]>modulus[mavaluei][ mavaluej])

{ mavaluei=i

mavaluej=j

}

}

if(mavaluei!=k)

evaluechange_hang(k,mavaluei)

if(mavaluej!=k)

{

evaluechange_a_lie(mavaluej,k) //交换两列

evaluechange_value(mavaluej,k)

}

for(i=k+1i<numberi++)

{

lik=modulus[i][k]/modulus[k][k]

for(j=kj<numberj++)

modulus[i][j]=modulus[i][j]-modulus[k][j]*lik

constant[i]=constant[i]-constant[k]*lik

}

}

}

void equation::gauss_calculate()//高斯消去法以后计算未知量的结果

{

int i,jdouble sum_avalue

constant[number-1]=constant[number-1]/modulus[number-1][number-1]

for(i=number-2i>=0i--)

{

for(j=i+1,sum_avalue=0j<numberj++)

sum_avalue+=modulus[i][j]*constant[j]

constant[i]=(constant[i]-sum_avalue)/modulus[i][i]

}

}

void equation::evaluechange_hang(int m,int n) //交换a[][]中和b[]两行

{

int jdouble temp

for(j=0j<numberj++)

{ temp=modulus[m][j]

modulus[m][j]=modulus[n][j]

modulus[n][j]=temp

}

temp=constant[m]

constant[m]=constant[n]

constant[n]=temp

}

void equation::evaluechange_a_lie(int m,int n) //交换a[]中的两列

{ double tempint i

for(i=0i<numberi++)

{ temp=modulus[i][m]

modulus[i][m]=modulus[i][n]

modulus[i][n]=temp

}

}

void equation::evaluechange_value(int m,int n)//交换未知量x[m]与x[n]

{ char temp

temp=value[m]

value[m]=value[n]

value[n]=temp

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12396732.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存