原题链接:蓝桥杯基础练习VIP-高精度加法
解题思路:
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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复