解题思路:

       1. 用字符串数组来读入数字,用strlen可得知数组长度

       2.使用数字的ACSII码将字符1转换为数字1

注意事项:

       1.注意一下两个数组长度相等的情况吧,最高位可能有进位



参考代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int max(int a, int b){
    if(a>=b)    return a;
    else        return b;
}
int main() {
    char ach[110];//字符数组用来读取输入,之后可以用strlen获取长度
    char bch[110];
    int a[110],lena;//a[0],b[0],c[0]是个位
    int b[110],lenb;
    int c[110],i;//i为数组c的长度,i等于数组a和数组b长度相比较,较大的那个值,i=max(lena,lenb)
    int r=0;//r是记录进位的
    scanf("%s",ach);
    scanf("%s",bch);
    lena=strlen(ach);
    lenb=strlen(bch);
    for (int i = 0; i <lena ; ++i) {//字符1的ASCII码是49,做数值运算时字符是用ASCII码计算,
                                    // 因为49-48=1,所以可从字符转换为整型数字
        a[lena-1-i]=ach[i]-48;  //输入的字符是ach[]是按高位到低位,现在处理为从a[0]开始为个位;
                                // 否则若a[0]与b[0]为最高位,有进位就无法存储了
    }
    for (int j = 0; j <lenb ; ++j) {
        b[lenb-1-j]=bch[j]-48;
    }
    for( i=0;i<max(lena,lenb);i++){
        c[i]=(a[i]+b[i]+r)%10;            //a与b的本位加上来自低位的进位对10求余就是本求和的值
        r=(a[i]+b[i]+r)/10;                //本位和没有求余时,若大于10,则r为1,有进位;反之为0,无进位
    }
    if(lena==lenb&&r==1) {              //特殊情况,当输入的两个数字长度相同时,最高位可能会进位,r=1就输出,
                                            // r为0说明没有进位,不输出(题目说数字没有前导0)
        c[i]=r;
        printf("%d",c[i]);
    }
    for (int l = max(lena,lenb)-1; l >=0 ; l--) {//c[0]是个位,所以反过来输出,先输出高位
        printf("%d",c[l]);
    }
    return 0;
}


点赞(1)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论