杭电HDU1002 A + B Problem II 大数据相加基础题AC代码

代码思路算是比较简单的,注释也写的比较多,去掉我格式上的空行和注释也就40行左右,比较好理解。不过题目坑点很多,总结一下我遇到的问题:

WA:

  1. 0+0是否会输出0
  2. 输出的数字前面有没有多余的0 比如00003+0005
  3. 输入的两个数是什么顺序 输出就要是什么顺序 比如你输入的两个数是 1 10000009
    那么最后输出就要是 1 + 10000009 = 10000010
    我几个月以前写的代码会判断两个字符串哪个长 如果第二个长就把两个交换字符串交换位置 输出的时候没注意 都是长的在前面 比如上面的就会 10000009 + 1 = 10000010 WA了无数次才发现
  4. 注意%s + %s = 之间的几个空格
  5. Case 1: 注意空格、大写,冒号要是英文半角符号。注意不要出现 Case 0: 这样的问题( 很多看起来是格式的问题最后都会导致WA WA的时候一回头看看输出)

PE:

  1. 每组输出后面是换行+空行
  2. 最后一组输出后面只有换行,没有空行

贴一下C++ AC的代码(没有考虑负数),有错误或者可以改进的地方欢迎留言,渣渣的第一帖~

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

void add(char a[], char b[]);
int T;//测试数据的组数

int main()
{
    int  a, b, i;
    scanf("%d", &T);
    while (T--)
    {
        char num1[1001], num2[1001];
        scanf("%s%s", num1,num2);
        add(num1, num2);
    }
    return 0;
}
void add(char num1[], char num2[]) //大数相加函数
{
    static int N = 1; 
    int a[1001] , b[1001], len_a, len_b, i, j; //a充当sum数组输出 
    len_a = strlen(num1);
    len_b = strlen(num2);
    memset(a, 0, 1001 * 4);  //数组初始化  也可以 = { 0 } 
    memset(b, 0, 1001 * 4);

    //倒序储存 个位对个位  十位对十位 否则可能会错位
    //储存在字符数组里 字符型转换成整型 注意减‘0’或减48
    for (i = len_a - 1, j = 0; i >= 0; i--)
        a[j++] = num1[i] - '0';  
    for (i = len_b - 1, j = 0; i >= 0; i--)
        b[j++] = num2[i] - '0';

    //相加  储存在数组a里
    for (i = 0;i < (len_a>len_b?len_a:len_b); i++) 
    {
        a[i] += b[i];
        if (a[i] >= 10) //满10
        {
            a[i] -= 10; //本位只保留个位数
            a[i + 1]++; //下一位进1
        }

    //输出部分

    //Case的C要大写 Case和1之间有空格 后面有冒号 换行
    //%s + %s = 
    printf("Case %d:\n%s + %s = ", N++, num1, num2); 

    while (a[i] == 0) { i--; }//去掉前面多余的0
    if (i < 0)cout << "0"; //结果=0
    for (i; i >= 0; i--)
        cout << a[i];
    cout << endl; //每组测试数据间有空行
    if (T != 0)
        cout << endl;   //最后一组数据之后只换行 没有空行
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值