解题思路:
注意事项:
参考代码:
#include<stdio.h>
#include<string.h>
//因为我下面有用strlen( )函数,所以需要用头文件“#include<string.h>”
//虽然codeblocks里面不用这个头文件好像也可以,但是实际上不用是不符合c语言标准的好像
int main ( )
{
char a1[200]={0} ,a2[200]={0} ;
//为了防止出现意外意外情况,我让每一个数组的初始值都为0
int sum[201]={0} ;
//可能是9999+1111这样子的,他们和的位数会超过200位,所以定义数组 sum 长度201 ;
/*这里必须初始化为0,如果9999+2000就会难以解决,看到后面应该就知道我为什么这么说了*/
int b1=0 , b2=0 ;
//原来方便记录 a1 和 a2 的长度 ;
scanf("%s %s",a1 ,a2 ) ;
//这题用"%s\n%s"也可以,我试过了,能过
//因为我想把他们当成一个个整体存储,所以用字符串类型%s输入
//又因为数组名就是这个数组的首地址,所以不用&a1
//如果用 &a1[200] 就表示取 数组 a1 的第二百个元素的地址 ;
b1=strlen(a1) ;
b2=strlen(a2) ;
//用strlen( ) 方便计算数组 a1 和 a2 的长度 ;
int c1[201]={0} ,c2[201]={0} ;
/*为什么这里不能用c1[b1]={0} 这样的?因为不符合c 标准,c标准要求数组的长度在编译前就是常量表达式 ,例如 ”1+1“或者”2“ 这样子的 ,虽然有一些编译器可能会支持c1[b1],并且还不支持赋初值,然后就是c语言网不支持c1[b1]这种 */
//我想要用数组 c1 和 c2 分别记录下 数组 a1 和数组 a2 中的每一个数字
//然后再通过让数组 c1 和 数组 c2 中的每一个对应的元素相加,求出sum ;
//通过遍历输出数组 sum 中的每一个元素的方式把数组 a1 和数组 a2 的和求出来
for ( int i=0 ; i<=b1-1 ; i++ )
{
c1[b1-1-i]=a1[i]-'0' ;
}
//把存储字符串元素的数组转化为存储单个数字的数组,通过ascii码
// 0到9的ascii码是从30到39
/* 用 c1[b1-1-i] = a1[i] ; 是因为
假如数组 a1[5]=="1234" ,那么正常用 c1[i]=a1[i] 就会出现 c1[0]=a1[0]=1 的情况
而我们知道 a1[0]==1 这个“1”其实是 "1234“的最高位 ,如果我们此时不倒序输入c1,那么我们接下去的计算就无法用正常方式进行进位,为了避免麻烦的思考,所以我干脆一开始就让它倒序输入算了 */
for ( int i=0 ; i<=b2-1 ; i++ )
{
c2[b2-1-i]=a2[i]-'0' ;
}
int max=(b1>b2) ? b1 : b2 ;
//定义一个变量max 把它赋值为 b1 和 b2 中的最大值
//为了确定相加的最大次数
for ( int i=0 ; i<=max-1 ; i++ )
{
sum[i]=c1[i] + c2[i] + sum[i] ;
//正常来说其实是不用加sum[i]的 但是前一个元素的时候可能超过了10
//为了确保计算正确性,所以加sum[i]
/* 这里也是我觉得数组 sum 必须初始化为 0 的原因,不初始化为0 ,我无法保证sum[0]会等于什么 */
if ( i== max-1 && sum[max-1]>=10 ) max++ ;
/* 万一真的出现9999+1111这些类似的情况,我就在最前面增加一位数的位置,也是因为我后面那个 if( ) 我才这么做的 */
if ( sum[i]>=10 )
{
sum[i+1]=sum[i+1]+sum[i]/10 ;
sum[i]=sum[i]%10 ;
}
//这里我也不知道怎么说好,所以我决定用例子说明
/* 假设sum[5]=c1[5]+c2[5]+sum[5] ,其中c1[5]==3 ,c2[5]==8,sum[5]==0,sum[6]==0 ;
那么sum[5]==11 ;
sum[6]=sum[6]+sum[5]/10 ;
那么sum[6]=0+11/10==1 ;
然后下一次循环 sum[6]=c1[6]+c2[6]+sum[6] ; 这样子我就成功地实现了进位 */
}
int k=0 ;
//为了控制不要输出前导 0
for ( int i=max-1 ; i>=0 ; i-- )
{
if(sum[i]!=0) k=1 ;
//一直到遇见第一个非0 数字,我才让计算机开始输出
if(k!=0) printf("%d",sum[i] ) ;
/*这里千万千万不要用 %c 输出 不然输出结果挺好看的,大家好奇的话也可以去试试看,我试过了,我就这么错过,我觉得这输出结果至少比我空手画的好看多了 */
/* 因为我们前面已经把数组 a1 和 数组 a2 的字符串类型 转化成了 整型 的数组 c1 和数组 c2 了,然后我们定义的数组 sum 也是 int型 的,所以要用 %d 占位 */
}
return 0 ;
}
0.0分
0 人评分
C二级辅导-统计字符 (C语言代码)浏览:782 |
C语言训练-最大数问题 (C语言代码).........关于-1浏览:762 |
WU-蓝桥杯算法提高VIP-交换Easy (C++代码)浏览:1186 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:631 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:673 |
简单的a+b (C语言代码)浏览:881 |
循环入门练习6 (C语言代码)浏览:1067 |
Quadratic Equation (C语言代码)浏览:1035 |
1052题解(链表操作)浏览:782 |
C语言训练-8除不尽的数 (C语言代码)浏览:1469 |