NOI系列练习题【1.6编程基础之一维数组 10.大整数加法】(详细注释版)

NOI系列练习题【1.6编程基础之一维数组 10.大整数加法】

描述
求两个不超过200位的非负整数的和。

输入有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。输出一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555

/*
解题思路 :(1)两个加数以字符串形式输入并存放在字符数组中。
(2)将存放字字符串的中数字字符转成整数形式并倒序存放到整数数组当中。
(3)将两个整数数组对应存储单元的数字相加,结果放在第一个数组当中,
数字之和>=10,表示有进位,则在把下一单元的数字加1(表进位),
第一个数组单元对应的数位两者之和减去10。
(4) 将计算完后的存放在第一个数组中的数倒序后存到第3个整形数组。
(5) 去除整数前置0后输出。
*/


/*
程序名称:大整数加法
程序功能:求两个不超过200位的非负整数的和。
编写时间:2018年8月16号;
编写地点:湖南省长沙市岳麓区
编写码农:翼虎小微
调试平台: Dev c++ 5.2.0.3
*/
#include//要用cin,cout等输入输出,需要此头文件 
#include//要用strlen()函数计算字符串长度,需要此头文件 
using namespace std; //添加的c++程序命名空间,以简化标准类和对象的输入。 
int main()
{
    int i,j,str1,str2,k=0;//i,j是遍历数组的循环str1,str2输入数的数目。k是判断是否有先导0的工具 
    int a[201],b[201],c[201];//a存第一个加数,b存第二个加数,c存总数。 
    char c1[201],c2[201]; //c1存第一个输入的字符串,c2存第二个输入字符串。 
    for(int i=0;i<201;i++)//初始化数组a,b,把所有位上的数变成0。 
    {
        a[i]=0;
        b[i]=0;
    }
    cin>>c1;//第1个加数作为字符串输入存放在字符数组c1 
    cin>>c2;// 1个加数作为字符串输入存放在字符数组c12 。 
    str1=strlen(c1);//计算第1个加数的数字位数。 
    str2=strlen(c2);//计算第2个加数的数字位数。 
    j=0;
    for(int i=str1-1;i>=0;i--)
    //把以字符串形式输入的数(字符形式存储)转化为数组的数字,并且数倒序存放。
    //个位存放在数组第一个存储单元,十位在第二个存储单元,…… 
    {
        a[j++]=c1[i]-'0';//输入字符的ASCII码减去字符0的ASCII码得到该字符对应的数值。 
    }
    j=0;
    for(int i=str2-1;i>=0;i--)//处理第2个字符串 ,处理方法同上。 
    {
        b[j++]=c2[i]-'0';
    }
    for(int i=0;i<201;i++)//判断是否有进位。 
    {
        a[i]=a[i]+b[i];//对应单元数值相加结果存到第1个数组 。 
        if(a[i]>=10)//如果有进位的情况 。 
        { 
            a[i]=a[i]-10;//进位后的相加结果。 
            a[i+1]++;//进位值累加到下一个单元格 
        }
    }
    j=0;
    for(int i=200;i>=0;i--)//倒序把个位回到最后一位十位回到倒数第二位。 
    {
        c[j]=a[i];//将存有相加结果的第1个数组的元素倒序存放到第3个数组。 
        j++;
    }
    for(int i=0;i<201;i++)//输出大整数相加结果,去除结果中的前置0 
    {
        if(c[i]!=0)//判断前置元素是否是0,如果不是,把开关变量设为1 
        {
            k=1;
        } 
        if(k==1)//开关变量为1,表示碰到第1个需要输出整数的第1位,
                //余后元素(包括0)全部输出
        {
            cout<if(k==0)//考虑到两个加数都为0的情况,直接输出0; 
    {
        cout<<"0";
    }
     return 0;
}

你可能感兴趣的:(K12信息学,NOI系列练习题)