解题思路:
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 人评分