解题思路:
话不多说看注释
注意事项:
有不懂的可评论问题
参考代码:
#include<stdio.h>
#include<string.h>
main(){
char a[1000],b[1000],c[1002];
while(scanf("%s%s",a,b)!=EOF){
int k=0,t=0,i,j,q=0; //t为进位制,需要进位时t=1,否则t=0
if(strlen(a)<=strlen(b))\\选出较小的数的位数赋值给q
q=strlen(a);
else
q=strlen(b);
for(i=strlen(a)-1,j=strlen(b)-1;q-1>=0;i--,j--,q--){\\倒序相加直到较小的数加完
if(((a[i]%48+b[j]%48)+t)>=10)//表示要进位
{
c[k++]=((a[i]%48+b[j]%48)+t)%10+48;//0的阿斯克码制为48
t=1;
}
else{//不进位
c[k++]=(a[i]%48+b[j]%48)+48+t;
t=0;
}
}//到此较小的那个数已经加完
if(j==i&&t==1)c[k++]='1';//当两个数位数相同最后又要进位的情况
else{//两个位数不同
if(i>=0){//a位数更多时
if(t==1)//在位数较少的数加完后还需要进位的情况
for(j=i;j>=0;j--){
if(a[j]%48+t>=10){//判断a剩下的位数加进位是否还需要进位。例99999和1相加的情况
c[k++]=(a[j]%48+t)%10+48;//还需要进位
t=1;
}
else{//不需要进位
c[k++]=a[j]%48+t+48;
t=0;
}
}
else
{//在位数较少的数加完后不需要进位的情况
for(j=q;j>=0;j--){
c[k++]=a[j]%48+48;
}
}
if(t==1)c[k++]='1';//最后a还有进位的情况
}
else{//b的位数更多时
q=j;
if(t==1)
for(j=q;j>=0;j--){
if(b[j]%48+t>=10){
c[k++]=(b[j]%48+t)%10+48;
t=1;
}
else{
c[k++]=b[j]%48+t+48;
t=0;
}
}
else{
for(j=q;j>=0;j--){
c[k++]=b[j]%48+48;
}
}
if(t==1)c[k++]='1';
}}
for(i=k-1;i>=0;i--){//倒序输出
printf("%c",c[i]);
}
printf("\n");
}}
0.0分
0 人评分
C语言训练-阶乘和数* (C语言代码)浏览:1060 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1153 |
2^k进制数 (C++代码)使用递归方法浏览:736 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:511 |
c primer plus 第十二章 12.1小节浏览:400 |
C语言考试练习题_排列 (C语言代码)浏览:767 |
简单的a+b (C语言代码)浏览:752 |
C语言程序设计教程(第三版)课后习题6.6 (C++代码)浏览:649 |
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:672 |
最小公倍数 (C语言代码)浏览:1107 |