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]里边存的数字字符转换成了整形数值

被折叠的 条评论
为什么被折叠?



