PTA 1074 宇宙无敌加法器 (c++ 思路+全测试点分析)

本文深入解析1074宇宙无敌加法器题目,介绍使用字符串处理大数加法的技巧,包括处理进位、前导零及结果为零的特殊情况,通过代码实现展示了算法细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1074 宇宙无敌加法器 (20 分)

在这里插入图片描述
首先我要说,这道题真坑。。。真坑。。。。
好,下面进入正题。

思路:其实你要说怎么做的话,这道题并不算难。我这里建立了三个字符串类型用于接收输入的三个数。然后从最高位开始以此往下加,其实类似与电路里面的加法器。下面代码注释的很清楚,应该容易看明白,哪里不明白的话可以在下方评论,我看到会回你的。

测试点分析:
首先说1,3这两个点。最后我卡在这两个点好久好久。这两个点就是如果进位数的位数大于两个相加的位数的长度的话,你要怎么处理。比如说输入503 1 2 输出就应该是10而不是0(你可以看我15,16行注释的这两个代码和17,18行的区别)。
然后说2,4这两个点。这两个点比较容易,就是你设置的接收数据的变量类型,考虑不要超出范围了(所以我用的字符串)
最后说5这个点,就是前导0不能输出(我的20~26行代码),还有就是如果结果为0,就要输出0(最后一行代码);

#include <string>
using namespace std;
int main()
{
    string M,A,B;
    int s[1000]={0},t=0;//存放最终结果
    cin>>M>>A>>B;
    int a=A.size()-1,b=B.size()-1,m=M.size()-1,n1,n2,d,x=0;
    for(;a>=0||b>=0;t++,a--,b--,m--)
    {
        n1=a>=0?A[a]-'0':0;//如果A取完了就取0 
        n2=b>=0?B[b]-'0':0;//同A 
        d=m<0||M[m]=='0'?10:M[m]-'0';//m<0是指进位制长度小与输入的相加的位数所以用10进制  
/*        s[t]=(x+n1+n2)%d;//进位数加本位的两个数对进制数取余 
        x=(x+n1+n2)/d;//存放进位数;*/
        s[t+1]=(s[t]+n1+n2)/d;
        s[t]=(s[t]+n1+n2)%d;
    }
    bool flag=false;
    for(;t>=0;t--)
    {
    	if(!flag&&!s[t])	continue;//如果是前导0,则不能输出 
    	if(s[t])	flag=true;
    	cout<<s[t];
	}
    if(!flag)
    	cout<<"0";		
}
C++中,处理Polynomial Terms Addition (pta)即一元多项式的加法,可以创建一个简单的类来表示多项式项,包括系数和指数。这里是一个基础的实现示例: ```cpp #include <iostream> #include <vector> // 定义多项式项 class Term { public: int coefficient; // 系数 int exponent; // 指数 // 构造函数 Term(int c = 0, int e = 0) : coefficient(c), exponent(e) {} // 打印多项式项 void print() const { std::cout << coefficient << "x^" << exponent << " "; } }; // 多项式类,包含一个term向量存储所有项 class Polynomial { private: std::vector<Term> terms; public: // 添加项到多项式 void addTerm(Term t) { terms.push_back(t); } // 打印多项式 void print() const { for (const auto& term : terms) { term.print(); } std::cout << std::endl; } // 计算两个多项式之和 friend Polynomial operator+(const Polynomial& p1, const Polynomial& p2); // 这里可以添加其他操作... }; // 实现加法运算符重载 Polynomial operator+(const Polynomial& p1, const Polynomial& p2) { Polynomial result; for (const auto& term1 : p1.terms) { bool found = false; for (auto& term2 : p2.terms) { if (term1.exponent == term2.exponent) { result.addTerm(Term(term1.coefficient + term2.coefficient, term1.exponent)); found = true; break; } } if (!found) { result.addTerm(term1); // 如果在p2中没找到同指数项,则直接添加 } } return result; } int main() { Polynomial p1({1, 2, 3}); // x^2 + 2x + 3 Polynomial p2({4, 5, 6}); // 4x^2 + 5x + 6 p1.print(); // 输出: 1x^2 2x 3 p2.print(); // 输出: 4x^2 5x 6 Polynomial sum = p1 + p2; // 相加 std::cout << "Sum: "; sum.print(); // 输出相加结果 return 0; } ``` 在这个例子中,`operator+`被重载,使得`Polynomial`类型之间可以进行加法操作。当执行`p1 + p2`时,会合并两个多项式的所有对应幂次的系数。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

给个选择

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值