杭电1002:A+B Problem Ⅱ

来源:互联网 发布:淘宝店"开名"假货 编辑:程序博客网 时间:2024/06/05 16:41

嗯,写的比较粗略浅显,希望你们能看懂,如有不足之处,望指正

——————————————

//本题思路是://1.两字符串a,b先转化为整型数组c,d;//2.将转化成的数组相对应的位置加起来//注意:不是下标一一对应来加减的,此种解法是由两个数组最后一位开始加起//其实我写的有点复杂了,想到这一步,其实可以在前面就将字符串倒着转化为数字传入c,d两数组中,计算更加简单//3.最重要的便是这一步算法了,究竟如何从最后一位加起来存入sum数组中呢?//4.得到c,d最大下标作为循环相应位置相加的次数,因为另一个存入数字不多的数组其他位置都被置为0,所以可以按照最大的数组计算//5.相加后要知道一点:满十进一//6.于是写了一个if语句判断是一个sum数组位置是否大于10,若大于10则-10,后一位sum数组位置加一//7.最后,要输出时注意:题目要求的是两个输出case之间有一空行,不是一个case后一个空行//8.因此,可以先单独输出第一个,接着后面的case一个格式,先空行再输出!#include <iostream>using namespace std;#define N 1100void cir_cle(char a[], int b[])//将字符串转化为整型数组{    unsigned int i;    for ( i = 0; i<strlen(a); i++)    {        b[i] = a[i] - '0';    }    return ;}int main() {    int n, count = 0, i, j, k,length,len_gth;    cin >> n;//读取求和次数    while (n--)    {        char a[N], b[N];        int c[N] = { 0 }, d[N] = { 0 };//三个数组都置为0,后面方便加减        int sum[N] = { 0 };        if (n < 0 && n>19)            break;        else        {            count++;            cin >> a >> b;            cir_cle(a, c);//将字符串转化为整数形式            cir_cle(b, d);            k = 0;            i = strlen(a) ;//计算两字符串长度以得知整型数组的最大下标            j = strlen(b) ;            if (i > j)//比较两数组的最大下标来得到下一步循环次数length            {                length = i;            }            else            {                length = j ;            }            i--;            j--;            while (length--)//循环,计算,满十进一            {                sum[k] = sum[k]+c[i] + d[j];                if (sum[k] >= 10)                {                    sum[k] -= 10;                    sum[k + 1] += 1;                }                k++;                if (i == 0)                    c[i] = 0;                else                    i--;                if (j == 0)                    d[j] = 0;                else                    j--;            }            if (sum[k] == 0)//判定sum数组k+1位是否有数存在,如999+1,判定sum[3]是否有数                len_gth = k;            else                len_gth = k + 1;            if (count == 1)            {                cout << "Case" << ' ' << count << ':' << endl;//输出                cout << a << ' ' << '+' << ' ' << b << ' ' << '=' << ' ';                for (i = len_gth - 1; i >= 0; i--)                    cout << sum[i];                cout << endl;            }            else            {                cout << endl;                cout << "Case" << ' ' << count << ':' << endl;//输出                cout << a << ' ' << '+' << ' ' << b << ' ' << '=' << ' ';                for (i = len_gth - 1; i >= 0; i--)                    cout << sum[i];                cout << endl;            }        }    }    return 0;}//提供一些测试数据://999+ 1= 1000 //这个数据如果算法没写好会出错,我一次出错就是10//1 +2= 3//这个数据。。可以简单测试你的思路是否有错//112233445566778899 + 998877665544332211 = 1111111111111111110