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