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

来源:互联网 发布:订酒店哪个软件好 知乎 编辑:程序博客网 时间:2024/06/05 05:59

代码思路算是比较简单的,注释也写的比较多,去掉我格式上的空行和注释也就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;   //最后一组数据之后只换行 没有空行}
原创粉丝点击