HDOJ1004

#include<iostream>
#include "cstring"
using namespace std;
int add(char s1[],char s2[])
{
    int a[1001]={0},b[1001]={0};//当a[1000]时出错会在最后出现一个1
    int strlen1 = strlen(s1);
    int strlen2 = strlen(s2);
    for(int i=(strlen1-1),j=0;i>=0;i--)//如何将字符串数字转换为数字数组
        a[j++] = s1[i] - '0';
    for(int i=(strlen2-1),j=0;i>=0;i--)//将字符串调转输入
        b[j++] = s2[i] - '0';

    for(int i=0;i<1000;i++)
    {
        a[i] = a[i] + b[i];
        if (a[i] >= 10)
        {
            a[i] = a[i] - 10;
            a[i + 1]++;
        }
    }
    int i;
    for(i=1000;i>=0&&a[i]==0;i--); //将i定位到数组的有效端

    for( ;i>=0;i--)
        cout << a[i];


    return 0;
}
int main() {
    int n;
    char a[1000], b[1000];
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a >> b;
        cout << "Case " << i + 1 << ":" << endl;
        cout << a << " + " << b << " = ";
        add(a, b);
        cout << endl;
        if (i != (n - 1))
            cout << endl;

    }

    return 0;
}

第一、如何将长数字转化为字符串进行计算

第二、for的灵活运用,包括在第一个分号内多定义使字符串反向赋值给数组,包括如何将在定义数组时多出来的0抹去找到第一个不为0的数字的位子

第三、在转换计算得过程中:为何将字符串反向的两个原因:1.相加直接进卫给后一位2.在读取值的时候能直接从开头开始读取,而不用担心从末尾读会把本身数字的0消去的情况

第三、strlen()是直接计算有效字符的长度与sizeof不同(所占空间)

原文地址:https://www.cnblogs.com/cunyusup/p/7669356.html