a[i]-'0'

 for(i=0;i<x;i++)A[i]=a[x-1-i]-'0';//
 
#include<stdio.h>
#include"string.h"
#define max 1000+10
char a[max],b[max];
int main()
{       int  i,j,T,k;
        scanf("%d",&T);
       for(k=0;k<T;k++)
          {   int A[max]={0},B[max]={0};
              scanf("%s%s",a,b);
            int x=strlen(a);
            int y=strlen(b);
            for(i=0;i<x;i++)A[i]=a[x-1-i]-'0';//这两句-‘0’是什么意思啊,求解释~
            for(i=0;i<y;i++)B[i]=b[y-1-i]-'0';
            int c=0;
            for(i=0;i<max;i++)
             {  int s=(A[i]+B[i]+c);
                A[i]=s%10;
                c=s/10;
             }
            printf("Case %d:\n%s + %s = ",k+1,a,b);
            for( i=max-1;i>=0;i--) if(A[i])break;
           for(j=i;j>=0;j--)      printf("%d",A[j]);
           printf("\n");
            if(k<T-1)
               printf("\n");
         }
     return 0;
}
在计算机里你能存放的所有数据都只是0 和 1  
而字符‘0’在内存里的存放形式就是00110000  换算成十进制就是48  但是计算机碰见这个00110000的时候如果你让它按照字符型解释它就输出‘0’(printf(“%c”,‘0’)这样就会输出0)但是如果你让它按照十进制整形就是它就输出48(printf(“%d”,‘0’)这样就会输出48)
所以字符型在内存中是保存为数值的   就是一个连续8位的内存区 字符型是可以直接参与运算的  
‘0’+5就是48+5  按照字符解释48+5=53就是字符‘5’ 

所以你的程序也可以这样写  :a[x-1-i] - 48  写成a[x-1-i] - '0' 只是直观点而已 对计算机来说 跟前一个表达式是一样一样一样的   
 
字符在计算机里是用数字表示的    就是ascii码   这个码就是一个约定  约定数值48就代表字符'0' 
按照字符输出的时候就会输出'0'  这个'0'和数值0是有区别的

打个比方吧  a[1]是'1'   字符'1'的ascii码是49  而字符'0'的ascii码是48  
这样a[1]-'0'  就是49-48  求得的就是数字1   这样就把a[1]里边存的数字字符转换成了整形数值 
 
 
  • 12
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值