求大神用C++写一下这个程序,跪谢,在线等

2025-04-17 07:32:28
推荐回答(1个)
回答1:

#include 
#include 
#include 
using namespace std;

void Add(listn1,listn2,listn3);//求和函数声明
int main()
{
listlist1,list2;//定义两个单链表,用来存储两个大整数
ifstream input("data.txt");//打开源数据文件
if(input.fail())
{
cout<<"打开文件失败!\n";
system("puase");
return 0;
}
char ch;//临时变量,存储每次取到的字符
/*假设每个正整数都以#号结尾*/
int i=1;//临时变量,统计当前取到的字符是第几个,方便剔除逗号
while((ch=input.get()) != '#')  //取第一个数
{
if(i%5!=0) //不是逗号,则存入链表
{
cout< list1.push_front(ch);
}
i++;
}
cout< input.get();//读取换行符
i=1;
while((ch=input.get()) != '#')  //取第二个数
{
if(i%5!=0) //不是逗号,则存入链表
{
cout< list2.push_front(ch);
}
i++;
}
cout< listlist3;//用来存储计算结果的链表
Add(list1,list2,list3);//求和
}

void out(listn)  
{
ofstream output("result.txt");//创建文件
if(output.fail())
{
cout<<"创建文件失败!\n";
system("pause");
return;
}
int m=1;
while(!n.empty())
{
if(m%5!=0)
{
cout< output< n.pop_front();
}
else
output<<',';
m++;
}
}

void Add(listn1, listn2, listn3)//求和
{
int k = 0;//进位
    char temp;//临时计算结果
while(!n1.empty())
{
temp = n1.back() + n2.back() - '0' + k;
if(temp > '9')
{
temp -= 10;
k = 1;  //进位
}
else
k = 0;
n1.pop_back(); //n1弹出末尾元素
n2.pop_back();
n3.push_back(temp);//将结果逆序存储在链表n3
}
while(!n2.empty())
{
temp = n2.back() + k;
if(temp > '9')
{
temp -= 10;
k = 1;  //进位
}
else
k = 0;
n2.pop_back();
n3.push_back(temp);
}
if(k == 1)
n3.push_back(k);
out(n3);
}

由低到高位看起来不习惯啊,你测试一下,看运行是否正确。