杭电oj-1002-A+B Problem

本文介绍了一种处理非常大的整数相加的问题,并提供了一个详细的C++代码实现方案。该方案利用字符串和数组来存储和计算大数,解决了传统整型数据无法表示的情况。文章还考虑了不同长度数字相加的特殊情况。

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

Problem Description

I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.

 

Input

The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. 
Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.

 

Output

For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line is the an equation "A + B = Sum", Sum means 
the result of A + B. Note there are some spaces int the equation. Output a blank line between two test cases.

 

Sample Input

2 
1 2 
112233445566778899 998877665544332211

 

Sample Output

Case 1:
1 + 2 = 3

Case 2: 
112233445566778899 + 998877665544332211 = 1111111111111111110

 

 问题分析

 此题是有一定难度的,其难点在于,如何表示当有1000位数的数字,因为就算是long long 型也是无法表达这么大的数字的(long long 是能表示出最大的数字的数据类型,其范围为9223372036854775807 ~ -9223372036854775808),因此应考虑采用数组进行存储,把我们输入的数转换成字符串,再将其转换为整数,另外,在本题中要注意相加的几种情况,

第一种,A.length==B.length

第二种,A.length>B.length

第三种,A.length<B.length

 对于每种情况应该如何考虑,最后要注意题中所给的输入、输出格式。

 

 

Code:

#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
string a,b;
int sum[1005],q;//q为相加之后的位数 
void add2(string a,string b) {
        /*两个大数相加求和*/
    int m,n,t=0,i=0,int_a,int_b;
    //t为进位数 
    m=a.length()-1;
    n=b.length()-1;
    while(m>=0&&n>=0){
        int_a=a[m]-'0';//将输入的每一位数先转换成int型 
        int_b=b[n]-'0';
        sum[i]=(int_a+int_b+t)%10;//相加后第i位的数字
        t=(int_a+int_b+t)/10;//相加后向上一位进的位数
        i++; 
        m--; 
        n--; 
    }
    if(m>n){
        while(m>=0){
            int_a=a[m]-'0';
            sum[i]=(int_a+t)%10;
            t=(int_a+t)/10;
            m--;
            i++;
        }
        
    }
    if(m<n){
        while(n>=0){
            int_b=b[n]-'0';
            sum[i]=(int_b+t)%10;
            t=(int_b+t)/10;
            n--;
            i++;    
        }
            
    }
    q=i-1;
    if(t>=1)//最后一次相加存在进位时 
        {
            sum[i]=t;
            q=i;
        }
    

}
void output() {
    /*输出函数*/
    int i=q;
    cout<<a<<" + "<<b<<" = ";
    for(;i>=0;i--){
        
        cout<<sum[i];        
    }
    cout<<endl; 
    
}
int main() {
    int n;//测试用例数
    cin>>n;
    int i=0;
    for(; i<n; i++) {
        cin>>a>>b;
        add2(a,b);
        printf("Case %d:\n",i+1);//测试样例格式 
        output();
        if(i<n-1)
        cout<<endl;
    }
    return 0;
}

 

 

转载于:https://www.cnblogs.com/X-Do-Better/p/8596137.html

<think>好的,我需要帮助用户查找杭电OJ(HDU OJ)平台上编号2090到2100之间的题目相关信息或解答。首先,我应该回忆一下杭电OJ的基本情况,它是一个常用的在线评测系统,主要用于算法竞赛练习,题目通常需要编程解决。 用户提供的引用中,引用[1]提到了输入多组数据,每组包括两个整数m和n(100<=m<=n<=999),这可能对应某道题目的输入格式,但不确定具体是哪一题。引用[2]和[3]是关于信息学学习资源和竞赛大纲,可能对用户有帮助,但直接关联性不大。 接下来,我需要确定用户的需求:寻找HDU OJ 2090到2100题的解答或信息。但根据我的知识库,我无法直接访问外部网站或实时获取题目内容,因此需要建议用户如何自行查找这些资源。 可能的步骤包括: 1. 直接访问杭电OJ官网,搜索对应题号。 2. 使用搜索引擎查找题解,例如在百度、Google中输入“HDU 2090 solution”等。 3. 参考知名的算法竞赛社区,如CSDN博客、博客园、Stack Overflow、GitHub等,这些平台常有用户分享题解。 4. 查看相关的竞赛书籍或在线资源,如《算法竞赛入门经典》等,可能有类似题目的解析。 5. 如果用户需要具体的解题思路,可以建议他们先查看题目描述,然后根据问题类型(如动态规划、图论等)寻找相应的方法。 需要提醒用户注意,部分题解可能存在错误,建议在理解思路后自己编写代码并通过OJ测试。此外,引用中提到的资源如信息学初学者园地(引用[2])和竞赛大纲(引用[3])可以作为学习的参考资料,帮助提升解题能力。 最后,考虑到用户可能需要具体的帮助,如果用户能提供某一道题的具体描述,我可以尝试给出更详细的解题思路或算法建议。</think>### HDU OJ 2090-2100题解答与信息查询方法 #### 一、直接访问杭电OJ官网 1. **进入HDU OJ官网**:访问 [http://acm.hdu.edu.cn](http://acm.hdu.edu.cn),在**Problem Archive**页面输入题号(如2090)进行搜索。 2. **查看题目描述**:点击题目链接可查看输入输出要求、样例及时间限制。例如,引用[1]中提到的输入格式可能对应某道特定题目。 #### 二、通过搜索引擎查找题解 - **搜索格式**:在Google或百度输入 `HDU 2090 solution` 或 `杭电2090题解`,通常能找到CSDN、博客园等平台的解析。 - **示例**:若题目涉及**动态规划**或**数学计算**,可添加关键词如 `HDU 2090 动态规划`。 #### 三、算法社区与代码平台 1. **GitHub/Gitee**:搜索 `HDU OJ Solutions`,许多仓库整理了题目的代码实现,例如: ```python # 示例代码框架(非真实题解) while True: try: m, n = map(int, input().split()) print(sum([i**2 for i in range(m, n+1)])) except: break ``` 2. **Stack Overflow**:针对具体错误或算法问题提问。 #### 四、竞赛教材与参考资源 - **推荐书籍**:《算法竞赛入门经典(第2版)》包含类似题型的解析,引用[3]中的编程训练大纲可帮助定位知识点。 - **信息学初学者园地**(引用[2]):提供基础算法教程,适合补充理论知识。 #### 五、注意事项 1. **代码验证**:复制他人代码时需通过OJ测试,避免因输入格式错误导致失败。 2. **题型分类**:2090-2100题可能涉及以下类型: - **数学题**:如质数判断、方程求解 - **字符串处理**:如回文检测、格式转换 - **动态规划**:背包问题、路径计数 #### 六、示例:HDU 2096题解思路 假设题目要求计算$A+B$的末两位数字(忽略进位): ```python while True: a, b = map(int, input().split()) if a == 0 and b == 0: break print((a % 100 + b % 100) % 100) ``` 此代码处理了多组输入,并确保结果仅保留末两位[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值