从这个题目领悟了自己之前没有注意的一些东西,在后面总结,这里先贴代码:
#include <cstdio>
#include <iostream>#include <cstdlib>
using namespace std;
int main()
{
int a,b;
while(cin>>a>>b,a+b)
{
char num[100][3]={0};
int cnt=0;
;
for(int i=0,j=0; i<100; i++)
if((a*100+i)%b==0)
{
cnt++;
if((a*100+i)%100>=10)
sprintf(num[j++],"%d",(a*100+i)%100);
else
{
num[j][0]='0';
num[j++][1]=(a*100+i)%100+'0';
}
}
;
cout<<num[0];
for(int i=1;i<cnt;i++)
cout<<' '<<num[i];
cout<<endl;
}
return 0;
}
(1).在开数组的时候char num[100][3]={0};,我一开始是char num[100][2];的,最终,输出的时候就出了问题,2个位置导致最终没有存入数组结束标志'\0',开3个,让最后一个位置存入'\0',而且要养成“开了一块内存区域来存东西就应该先初始化”的习惯。
(2).还有一个就是数字0和字符'0'的问题,数字0是int型数据,字符'0'是char型数据,在c语言中对于字符型的数据都是先转化为int型来处理,后回归char型的,从asc2表可知,每个字符都有其对应的int型值,这也就是char转int的“规则”了,也就体现了'0'和0的区别,它们数值上相差了48。