踏乡墨客


私信TA

用户名:njuptxll

访问量:1814

签 名:

njuptxll

等  级
排  名 23671
经  验 631
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校 南邮
专  业 通信工程

  自我简介:

解题思路:

       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;
}


 

0.0分

0 人评分

  评论区

  • «
  • »